300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > python删除数组元素_如何删除numpy数组中的特定元素

python删除数组元素_如何删除numpy数组中的特定元素

时间:2020-02-24 08:21:13

相关推荐

python删除数组元素_如何删除numpy数组中的特定元素

不是一个笨拙的人,我开了一枪:

>>> import numpy as np

>>> import itertools

>>>

>>> a = np.array([1,2,3,4,5,6,7,8,9])

>>> index=[2,3,6]

>>> a = np.array(list(press(a, [i not in index for i in range(len(a))])))

>>> a

array([1, 2, 5, 6, 8, 9])

根据我的测试,这优于numpy.delete()。我不知道为什么会这样,可能是由于初始数组的小尺寸?

python -m timeit -s "import numpy as np" -s "import itertools" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "a = np.array(list(press(a, [i not in index for i in range(len(a))])))"

100000 loops, best of 3: 12.9 usec per loop

python -m timeit -s "import numpy as np" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "np.delete(a, index)"

10000 loops, best of 3: 108 usec per loop

这是一个非常显着的差异(与我期望的方向相反),任何人都知道为什么会出现这种情况?

更奇怪的是,传递numpy.delete()列表比循环遍历列表并给它单个索引更糟糕。

python -m timeit -s "import numpy as np" -s "a = np.array([1,2,3,4,5,6,7,8,9])" -s "index=[2,3,6]" "for i in index:" " np.delete(a, i)"

10000 loops, best of 3: 33.8 usec per loop

编辑:它似乎与数组的大小有关。对于大型数组,numpy.delete()明显更快。

python -m timeit -s "import numpy as np" -s "import itertools" -s "a = np.array(list(range(10000)))" -s "index=[i for i in range(10000) if i % 2 == 0]" "a = np.array(list(press(a, [i not in index for i in range(len(a))])))"

10 loops, best of 3: 200 msec per loop

python -m timeit -s "import numpy as np" -s "a = np.array(list(range(10000)))" -s "index=[i for i in range(10000) if i % 2 == 0]" "np.delete(a, index)"

1000 loops, best of 3: 1.68 msec per loop

显然,这一切都非常无关紧要,因为你应该总是去清楚并避免重新发明轮子,但我发现它有点有趣,所以我想我会把它留在这里。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。