根据两列的值选择numpy ndarray中的行

use*_*444 16 python numpy multidimensional-array

我有一个很大np.ndarray (3600000,3)HUE,一个VALUE和一个相关的CLASS数字.对于每对HUEVALUE我想找到的,使用这个数组相应的Class数字.我是Python的初学者,并且很难做到这一点.你知道办法吗?

先感谢您!

Kei*_*awa 27

我假设你的数组看起来像:

       |(HUE)(VALUE)(CLASS)
row/col|   0     1     2
-------+-----------------
0      |   0     1     2
1      |   3     4     5
2      |   6     7     8
.      |   .     .     .
.      |   .     .     .
3599999|   .     .     .
Run Code Online (Sandbox Code Playgroud)

这是示例代码.为简单起见,我将尺寸3600000更改为5.

a = np.array(xrange(5 * 3))
a.shape = (5, 3)
Run Code Online (Sandbox Code Playgroud)

现在数组a看起来像这样:

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

如果你想要行HUE=9,请执行以下操作:

a[np.where(a[:,0] == 9)]
#array([[ 9, 10, 11]])
Run Code Online (Sandbox Code Playgroud)

如果你想要行VALUE=4,请执行以下操作:

a[np.where(a[:,1] == 4)]
#array([[3, 4, 5]])
Run Code Online (Sandbox Code Playgroud)

如果你想用HUE=0和行VALUE=1,请执行以下操作:

a[np.where((a[:,0] == 0) * (a[:,1] == 1))]
#array([[0, 1, 2]])
Run Code Online (Sandbox Code Playgroud)

  • 这真的很有帮助。 (2认同)
  • “HUE=1”或“VALUE=1”怎么样? (2认同)

eme*_*eth 7

试试这个代码:

 x[x[:, 2] == class_number[:, :2]
Run Code Online (Sandbox Code Playgroud)

哪里xnp.ndarray

 x[:, 2] == class_number
Run Code Online (Sandbox Code Playgroud)

containstrue/false表示最后一个class_number是否存在。

你需要看看:Boolean indexinghttp://wiki.scipy.org/Cookbook/Indexing

从评论移过来。