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]