我从NumPy
回到了MATLAB
,对这里的广播还不太了解。有人能给我解释一下为什么第一个失败了,第二个(更明确地说是有效的)?据我了解,x0
和x1
都是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
2条答案
按热度按时间nnsrf1az1#
在
unifrnd
函数中有一个大小验证(您可以在命令行中输入open unifrnd
以查看函数代码)。如果第三个输入与前两个输入的大小不一致,则发送错误:但是,如果您跳过这一部分(例如,如果您创建了一个没有大小检查的自定义函数),由于隐式扩展,失败的两个函数调用都将实际工作。真正的问题是以这种方式调用函数是否有意义。
TL;DR:不是广播失败,而是功能不允许你输入这些集合
e5njpo682#
unifrnd
实质上调用rand
并将缩放和移位应用到所需的间隔。因此您可以使用rand
手动进行伸缩和移位,允许您使用广播(单例扩展):