NumPy 广播不起作用
NumPy broadcasting doesn't work
我正在尝试传播两个向量之间的差异。这适用于像这样的简单情况:
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]]]
在这种情况下,您需要在 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
我正在尝试传播两个向量之间的差异。这适用于像这样的简单情况:
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]]]
在这种情况下,您需要在 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