我试图播放两个向量之间的差异。这适用于这样一个简单的案例:
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]]]
答案 0 :(得分:6)
在这种情况下,您需要在data
:
>>> data[:, None] - centers
array([[[-1, 0],
[-2, -1]],
[[ 1, 2],
[ 0, 1]],
[[ 4, 5],
[ 3, 4]]])
原来data.shape
是(3, 2)
而centers.shape
是(2, 2)
。 NumPy无法将这些形状的数组一起广播,因为第一轴的长度不兼容(它们需要相同的长度,或者其中一个需要1
)。
插入额外尺寸,data[:, None]
具有形状(3, 1, 2)
,然后轴的长度正确对齐:
(3, 1, 2)
(2, 2)
# #
# # lengths are equal for this axis
#
# 1 is compatible with any length