如何删除特定列值不在其他数组中的行?

时间:2015-07-13 12:37:39

标签: python numpy

如何删除numpy 2d数组中的行,其中特定列中的值不在其他数组/列表中。速度很重要。

我发现如何通过将列调整为特定值来仅保留行:

xyzv = xyzv[xyzv[:,3].astype(int) == 100]

但是我需要将它与更多值(我的值数组)进行比较。我只是向黑暗中射击:

xyzv = xyzv[xyzv[:,3].astype(int) in my_values]

以及其他一些变化。但是蟒蛇没有笑。

1 个答案:

答案 0 :(得分:1)

您可以使用np.in1d -

search_nums = [100,102] # List of search numbers. NumPy arrays would work too.
xyzv = xyzv[np.in1d(xyzv[:,3].astype(int),search_nums)]

示例运行 -

In [42]: xyzv = np.random.randint(98,104,(7,4)).astype(float)

In [43]: xyzv
Out[43]: 
array([[  98.,  100.,  102.,  102.],
       [  99.,  102.,  102.,  101.],
       [ 100.,   99.,   98.,  100.],
       [ 100.,  101.,  102.,   99.],
       [  99.,  102.,  103.,  101.],
       [ 103.,  100.,   98.,  102.],
       [ 102.,  101.,  103.,  101.]])

In [44]: search_nums = [100,102]

In [45]: xyzv[np.in1d(xyzv[:,3].astype(int),search_nums)]
Out[45]: 
array([[  98.,  100.,  102.,  102.],
       [ 100.,   99.,   98.,  100.],
       [ 103.,  100.,   98.,  102.]])