4

我正在尝试广播两个向量之间的差异。这适用于像这样的简单情况:

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]]]
4

1 回答 1

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
于 2015-06-06T14:11:53.613 回答