2015-07-13 51 views
1

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

我发现了如何通过调节柱只保留行特定的值:

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

但我需要它的方式更值(我的价值观的数组)进行比较。我只是拍到了黑暗中:

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

和其他一些变化。但蟒蛇并没有笑。

+0

是xyzv一个numpy的二维数组,这是不是xyzv [:3] .astype(INT)== 100?给布尔值?你怎么能传递一个布尔值在这里xyzv [布尔]? –

回答

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.]]) 
+0

只是稍作修改,我要求删除哪些不在search_nums中。换句话说,这意味着保留search_nums中的内容。所以我删除〜不倒置它。谢谢。 – Miro

+0

@Miro啊是的!编辑。 – Divakar

相关问题