首页 文章

NumPy广播不起作用

提问于
浏览
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]]]

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
    

相关问题