我正在观察使用numpy广播的一些奇怪行为。该问题如下所示,在运行第一段代码时会产生错误:
getenv("HOME")
如果我改用% Your matrix
M = randn(50943 , 3);
% The coordinates you are looking for
P = [0,0,0];
% Distance between all coordinates and target point
D = sqrt(sum((M - bsxfun(@minus,M,P)).^2,2));
% Closest coordinates to target
[~ , pos] = min(D);
% Display result
disp(M(pos , :))
扩展B的尺寸,它将成功创建数组,但是现在(错误地)它具有错误的尺寸:
A = np.ones((10))
B = np.ones((10, 4))
C = np.ones((10))
np.asarray([A, B, C])
ValueError: could not broadcast input array from shape (10,4) into shape (10)
为什么它不能广播第一个示例,并且如何才能得到一个如下所示的数组(请注意,第二个数组周围只有双括号)?任何反馈都非常感谢。
B = np.expand_dims(B, axis=0)
答案 0 :(得分:3)
例如包含None
可以阻止广播,因此可以选择以下解决方法:
np.asarray([A, B, C, None])[:-1]
结果在这里:
array([array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]),
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]]),
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])], dtype=object)