【问题标题】:Numpy: select value at a particular row for each column of a matrixNumpy:为矩阵的每一列选择特定行的值
【发布时间】:2015-03-09 04:21:54
【问题描述】:

我有一个二维矩阵X = ((a11, a12, .. a1n), (a21 .. a2n) .. (am1, .. amn)) 和一个一维向量y = [y1, ..., yn],每个yi1m 之间。对于X 的每一列i,我想在yi 行中挑选出元素。也就是我要挑出向量z = (a_(y1 1), ... a_(yn n))

有没有矢量化的方式来做到这一点?

【问题讨论】:

    标签: python arrays numpy matrix machine-learning


    【解决方案1】:

    这个怎么样:

    In [39]: x = np.arange(12).reshape(4,3)
    
    In [40]: y = np.array([0,3,2])
    
    In [41]: x[y[None, :], np.arange(len(y))[None,:]][0]
    Out[41]: array([ 0, 10,  8])
    
    In [42]: x
    Out[42]: 
    array([[ 0,  1,  2],
           [ 3,  4,  5],
           [ 6,  7,  8],
           [ 9, 10, 11]])
    

    【讨论】:

    • 谢谢! (虽然它应该是 x.T 而不是 x 但我明白了)
    • 可以简化为:x[y,[0,1,2]]
    • @hpaulj,这样更好。
    【解决方案2】:

    作为替代解决方案,np.choose 可用于进行选择。

    >>> x = np.arange(16).reshape(4,4)
    

    所以x 看起来像这样:

    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11],
           [12, 13, 14, 15]])
    

    现在可以像这样在每一列中选择特定行 y 的值:

    >>> y = np.array([3, 0, 2, 1])
    >>> np.choose(y, x)
    array([12, 1, 10,  7])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      相关资源
      最近更新 更多