问题描述
我的代码中有这个数组,但是我需要删除包含零的行(在这种情况下是第三行和第四行)。我尝试了一些选择,但都没有成功,有人可以建议我解决这个问题吗?
我留在数组下方:
print(AA)
array([[2.40258090e+01,5.46388441e+00],[2.37367092e+01,1.63425169e+02],[0.00000000e+00,1.56246202e-01],[1.68035590e+01,0.00000000e+00],[1.06032437e+01,6.41505749e+00]])
解决方法
基于价值:
要按值过滤数组,可以使用布尔掩码:
a[(a[:,0] != 0) & (a[:,1] != 0)]
此过滤器数组 a
仅保留列 0
和 1
中的值不为零的行;使用按位 &
运算符。
基于索引:
对于 numpy 数组,使用 np.delete
可以解决问题,如:
np.delete(a,[2,3],axis=0)
其中 a
是数组。
记住,索引是从零开始的,所以第三和第四行 (axis=0
) 被索引为 [2,3]
。
所以python没有对数组的内置支持。请使用列表。
为了回答您的问题,让我们创建一个列表:
lst = [[2.40258090e+01,5.46388441e+00],[2.37367092e+01,1.63425169e+02],[0.00000000e+00,1.56246202e-01],[1.68035590e+01,0.00000000e+00],[1.06032437e+01,6.41505749e+00]]
# Now we filter
filtered_lst = [elem for elem in lst if 0 not in elem]
print(filtered_lst)
输出:
[[24.025809,5.46388441],[23.7367092,163.425169],[10.6032437,6.41505749]]
这就是你想要的吗?
,使用基本 Python 删除带有 0 的行的一种方法
j=1
while j<len(a):
for i in a[j]:
if i == 0.0:
a.remove(a[j])
j-=1
j+=1