Numpy ndarray按行对值排序,然后排除索引

2024-03-29 05:36:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个numpy.ndarray公司具体如下:

from numpy import array
a = array( [[1,1,0.4], [1,1,0.3],[0.4,0.3,1]] )

array([[ 1. ,  1. ,  0.4],
       [ 1. ,  1. ,  0.3],
       [ 0.4,  0.3,  1. ]])

以下是列:

dataidx = array( [1,2,3] )

我想按行对上面数组的值进行排序,然后指定相关的dataidx:

indices = np.argsort(-a, axis=1)
result = np.hstack((dataidx[:, None], dataidx[indices]))
print(result)
[[1 1 2 3]
 [2 1 2 3]
 [3 3 1 2]]

对于每一行,如何根据下面的第一列排除dataidx?你知道吗

[[1 2 3]
 [2 1 3]
 [3 1 2]]

Tags: fromimportnumpy排序np公司数组result
1条回答
网友
1楼 · 发布于 2024-03-29 05:36:06

有一个办法-

In [56]: m = result.shape[0]

In [57]: mask = np.c_[[True]*m,result[:,1:] != result[:,0,None]]

In [58]: result[mask].reshape(m,-1)
Out[58]: 
array([[1, 2, 3],
       [2, 1, 3],
       [3, 1, 2]])

还有一个-

In [105]: rm_idx = (result[:,1:] == result[:,0,None]).argmax(1)+1

In [106]: mask = np.ones(result.shape, dtype=bool)

In [107]: mask[np.arange(len(rm_idx)), rm_idx] = 0

In [108]: result[mask].reshape(result.shape[0],-1)
Out[108]: 
array([[1, 2, 3],
       [2, 1, 3],
       [3, 1, 2]])

相关问题 更多 >