NumPy我是從to回來的,MATLAB不太了解這里的廣播。有人可以向我解釋為什么第一個失敗而第二個(更明確的作品)?根據我的理解,x0andx1都是1x2陣列,應該可以將它們擴展到5x2.
n_a = 5;
n_b = 2;
x0 = [1, 2];
x1 = [11, 22];
% c = unifrnd(x0, x1, [n_a, n_b])
% Error using unifrnd
% Size information is inconsistent.
% c = unifrnd(x0, x1, [n_a, 1]) % also fails
c = unifrnd(ones(n_a, n_b) .* x0, ones(n_a, n_b) .* x1, [n_a, n_b])
% works
uj5u.com熱心網友回復:
函式內部有大小校驗unifrnd(可以open unifrnd在命令列輸入查看函式代碼)。如果第三個輸入與前兩個輸入的大小不一致,它會發送錯誤:
[err, sizeOut] = internal.stats.statsizechk(2,a,b,varargin{:});
if err > 0
error(message('stats:unifrnd:InputSizeMismatch'));
end
但是,如果您跳過這一部分(就像您創建一個沒有大小檢查的自定義函式一樣),由于隱式擴展,您的兩個失敗的函式呼叫實際上都會起作用。真正的問題是,以這種方式呼叫函式是否有意義。
TL;DR : 失敗的不是廣播,而是不允許您使用這些輸入集的功能
uj5u.com熱心網友回復:
unifrnd本質上呼叫rand并應用縮放和移位到所需的間隔。因此,您可以使用rand并手動進行縮放和移位,這允許您使用廣播(單例擴展):
c = x0 (x1-x0).*rand(n_a, n_b);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/531274.html
