基于两列的值选择numpy ndarray中的行

25
我有一个大的np.ndarray(3600000,3),其中包括HUEVALUE和相关的CLASS数字。对于每一对HUEVALUE,我想使用此数组找到相应的Class数字。我是Python的初学者,很难做到这一点。您知道如何解决吗?谢谢!
2个回答

47
我假设您的数组长这样:
       |(HUE)(VALUE)(CLASS)
row/col|   0     1     2
-------+-----------------
0      |   0     1     2
1      |   3     4     5
2      |   6     7     8
.      |   .     .     .
.      |   .     .     .
3599999|   .     .     .

以下是示例代码。为了简单起见,我将大小从3600000改为5。

a = np.array(xrange(5 * 3))
a.shape = (5, 3)

现在数组a的样子如下:

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

如果你想选择HUE=9的行,请按照以下方法操作:

a[np.where(a[:,0] == 9)]
#array([[ 9, 10, 11]])

如果你想选取VALUE=4的行,可以像这样操作:

a[np.where(a[:,1] == 4)]
#array([[3, 4, 5]])

如果你想获得 HUE=0VALUE=1 的行,请按如下方式操作:

a[np.where((a[:,0] == 0) * (a[:,1] == 1))]
#array([[0, 1, 2]])

2
HUE=1VALUE=1怎么样? - Joshua Vandenbor

7

试试这段代码:

 x[x[:, 2] == class_number[:, :2]

其中xnp.ndarray

 x[:, 2] == class_number

包含true/false,表示最后一个是否为class_number

您需要查看:http://wiki.scipy.org/Cookbook/Indexing中的布尔索引

从评论中移动而来。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接