首页 文章

根据另一个矩阵的列中的值获取numpy矩阵中的行子集

提问于
浏览
0

Headers 看起来很复杂,但问题并不那么难 . 我有2个矩阵: data_Xdata_Y . 我必须构建一个基于 data_X 的新矩阵,它将包含 data_X 的所有行,其中 data_Ycolumn 列中的对应值不等于 someNumber . data_Y 也一样 . 例如,这里是5乘2 data_X 矩阵和5乘1 data_Y 矩阵, column 是0和 someNumber = -1 .

[[ 0.09580361  0.11221975]
 [ 0.71409124  0.24583188]
 [ 0.67346718  0.72550385]
 [ 0.40641294  0.01172211]
 [ 0.89974846  0.70378831]]  # data_X

data_Y = np.array([[5], [-1], [4], [2], [-1]]) .

结果将是:

[[ 0.09580361  0.11221975]
 [ 0.67346718  0.72550385]
 [ 0.40641294  0.01172211]]
[5 4 2]

不难看出这可以通过以下方式实现:

data_x, data_y = [], []
for i in xrange(len(data_Y)):
    if data_Y[i][column] != someNumber:
        data_y.append(data_Y[i][column])
        data_x.append(data_X[i])

但我相信有更简单的方法(比如2或3个numpy操作)来获得我需要的结果 .

1 回答

  • 1

    使用boolean indexing -

    In [228]: X
    Out[228]: 
    array([[ 0.09580361,  0.11221975],
           [ 0.71409124,  0.24583188],
           [ 0.67346718,  0.72550385],
           [ 0.40641294,  0.01172211],
           [ 0.89974846,  0.70378831]])
    
    In [229]: Y
    Out[229]: 
    array([[ 5],
           [-1],
           [ 4],
           [ 2],
           [-1]])
    
    In [230]: mask = Y!=-1 # Create mask for boolean indexing
    
    In [231]: X[mask.ravel()]
    Out[231]: 
    array([[ 0.09580361,  0.11221975],
           [ 0.67346718,  0.72550385],
           [ 0.40641294,  0.01172211]])
    
    In [232]: Y[mask]
    Out[232]: array([5, 4, 2])
    

相关问题