Numpy ValueError将元组列表广播到数组中

时间:2018-11-19 14:32:47

标签: python arrays numpy

我正在观察使用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)

1 个答案:

答案 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)