我试图广播两个向量之间的差异 . 这适用于这样一个简单的情况:
In[1] : data = np.array([1,2])
In[2] : centers = np.array([[2,2],[3,3]])
In[3] : data - center
Out[3] : array([[-1, 0],
[-2, -1]])
但是当我尝试做同样的事情但是尺寸更大时,这将无法工作
In [4]: data = np.array([[1,2],[3,4],[6,7]])
In [5]: data
Out [5]: array([[1,2],
[3,4],
[6,7]])
In [6]: centers = np.array([[2,2],[3,3]])
In [7]: centers
Out [7]: array([[2,2],
[3,3]])
我想执行 data - centers
所以我可以得到输出:
array([[[-1,0],
[-2,-1]],
[[1,2],
[0,1]],
[[4,5],
[3,4]]]
1 回答
在这种情况下,您需要在
data
中插入一个额外的轴:原来
data.shape
是(3, 2)
而centers.shape
是(2, 2)
. NumPy无法将具有这些形状的阵列一起广播,因为第一轴的长度不兼容(它们需要长度相同,或者其中一个需要为1
) .插入额外尺寸
data[:, None]
的形状为(3, 1, 2)
,然后轴的长度正确对齐: