我有一个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_和“输入类型不支持”等错误,我不知道应该改变什么。
答案 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
具有相同的列数。