从python中的ndarray中删除行

时间:2016-11-01 10:55:10

标签: indexing boolean

我有一个2D数组A,它包含点的x和y坐标

array([[ 0,  0],
       [ 0,  0],
       [ 0,  0],
       [ 3,  4],
       [ 4,  1],
       [ 5, 10],
       [ 9,  7]])

正如您所看到的,( 0 , 0 )点经常出现。

我想删除这一点,以便数组看起来像这样:

array([[ 3,  4],
       [ 4,  1],
       [ 5, 10],
       [ 9,  7]])

由于实数中的数组非常庞大,因此在没有for循环的情况下执行此操作非常重要,否则需要很长时间。

我是python的新手,但我已经习惯了matlab,我可以很容易地解决它:

A (A(:,1) == 0 & A(:,2) == 0, :) = []

我认为它在python中几乎相同或非常相似,但我无法弄明白 - 我完全陷入困境。出现“使用a.any()/ all()”或“ufunc”bitwise_和“输入类型不支持”等错误,我不知道应该改变什么。

1 个答案:

答案 0 :(得分:1)

从技术上讲,您在MATLAB中所做的不是删除A中的元素。你实际在做的是创建一个缺少A元素的新数组。它相当于:

>> A = A (A(:,1) ~= 0 | A(:,2) ~= 0, :);

你可以在numpy中做同样的事情:

>>> a = a[(a[:,0] != 0) | (a[:,1] != 0), :]

然而,由于numpy的自动广播,你可以更简单:

>>> a = a[(a != [0, 0]).any(1)]

这适用于任何目标数组,只要它与a具有相同的列数。