如何删除numpy 2d数组中的行,其中特定列中的值不在其他数组/列表中。速度很重要。
我发现如何通过将列调整为特定值来仅保留行:
xyzv = xyzv[xyzv[:,3].astype(int) == 100]
但是我需要将它与更多值(我的值数组)进行比较。我只是向黑暗中射击:
xyzv = xyzv[xyzv[:,3].astype(int) in my_values]
以及其他一些变化。但是蟒蛇没有笑。
答案 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.]])