代码之家  ›  专栏  ›  技术社区  ›  Alex Gao

对成对操作使用“none”的numpy索引

  •  2
  • Alex Gao  · 技术社区  · 6 年前

    a = np.array([1, 2])
    b = np.array([3, 4])
    

    c = a + b[:, None]
    c
    array([[4, 5],
           [5, 6]])
    

    2+3 1+4

    b[:, None]
    [[3]
     [4]]
    

    2 回复  |  直到 6 年前
        1
  •  3
  •   user3483203    6 年前

    b[:, None] 是一种特殊类型的切片,其行为与 b[:, np.newaxis]

    >>> b.shape
    (2,)
    >>> b[:, None].shape
    (2, 1)
    

    此行为记录在 numpy docs [1]

    newaxis 对象可用于所有切片操作,以创建长度为1的轴。 None ,和

    现在我们有两个数组:

    array([1, 2]) + array([[3],
                           [4]])
    

    array([[4, 5],
           [5, 6]])
    

    numpy broadcasting [2] This article [3]


    本文的主要结论如下:

    或者如果一个尾随轴等于一个

    array([[1, 2],    +  array([[3, 3],
           [1, 2]])            [4, 4]])
    


    https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#numpy.newaxis

    [2] https://docs.scipy.org/doc/numpy-1.13.0/user/basics.broadcasting.html

    http://scipy.github.io/old-wiki/pages/EricsBroadcastingDoc

        2
  •  1
  •   Andreas Storvik Strauman    6 年前

    您要做的是添加一个新的轴:“列”-轴。 b a

    a+b[:, None] = [1,2] + [[3], = [[1,2], + [[3],[3],
                            [4]]    [1,2]]    [4],[4]]
    

    以下是方法/原因:

    numpy 默认情况下执行elementwise加法和乘法。这意味着如果 a=np.array([1,2]) a+2=np.array([1+2,2+2])=np.array([3,5])

    import numpy as np
    A = np.array([[1, 2],
                  [3, 4]])
    B = np.array([[1,1],
                  [0,0]])
    

    在这里 A+B

    A+B = [[1+1,2+1], = [[2,3],
           [3+0,4+0]] =  [3,4]]
    

    B (使用 B.T

    现在

    B.T= np.array([[1,0],
                   [1,0]])
    

    如果这次我们这样做,我们会得到:

    A+B.T=[[1, 2]  + [[1,0]  =  [[2,2],
           [3, 4]]    [1,0]]     [4,4]]
    

    a = np.array([1,2])
    B+a = [[1,2], + [[2, 3],
           [1,2]]    [1, 2]]
    

    .

    Numpy docs None np.newaxis -添加前的矢量!

    import numpy as np
    a = np.array([1, 2])
    b = np.array([3, 4])
    
    c=a+b.reshape(2,1)
    d=a+b.reshape(-1,1)
    e=a+b[:, np.newaxis]
    

    c ,请 d e 有相同的价值观!

    推荐文章