Python 从阵列中删除小元素
只是想知道为什么这个从数组中截取小数字的小函数不起作用Python 从阵列中删除小元素,python,Python,只是想知道为什么这个从数组中截取小数字的小函数不起作用 def chopper(values): for i in range(len(values)): if np.abs(values[i])<10**(-9): values=np.delete(values,i) return values print(chopper(np.array([1,2,10**(-10),-10**(-10),3]))) def斩波器(值): 对
def chopper(values):
for i in range(len(values)):
if np.abs(values[i])<10**(-9):
values=np.delete(values,i)
return values
print(chopper(np.array([1,2,10**(-10),-10**(-10),3])))
def斩波器(值):
对于范围内的i(len(值)):
如果np.abs(values[i])在迭代时从values
数组中删除一个值。
如果从数组中删除一个条目,len(values)
会将您发送到此数组的边界之外
幸运的是,如果您只想过滤数组,可以通过python中的列表理解来实现
def斩波器(值):
如果np.abs(v)>=10**(-9),则返回[v代表v的值]
这将创建一个仅包含选定元素的新数组您正在使用np从数组中删除元素。在数组上迭代时删除
(i继续增加)
因此,每次删除这样的值时,都应该减小i
的值:
import numpy as np
def chopper(values):
i = 0
continue_ = i < len(values)
while continue_:
if np.abs(values[i]) < 10**(-9):
values=np.delete(values,i)
else:
i += 1
continue_ = i < len(values)
return values
print(chopper(np.array([1,2,10**(-10),-10**(-10),3])))
当然,这可以在一个班轮中完成:
values = values[np.abs(values) > 10**(-9)]
这是因为每次删除元素时都会减小数组/列表的大小
如果是numpy数组,则可以使用索引:
values = values[np.abs(values) < 1e-9]
value=value[np.abs(值)<1e-9]
问题在于,您已从数组中删除了一个值,因此在数组长度上循环的循环现在从数组的末尾循环。此外,请记住,删除后,索引将发生变化。请在此阅读:
values = values[np.abs(values) < 1e-9]