从 numpy 数组中删除一些元素

2024-04-07

一个有趣的问题:

我想从 numpy 数组中删除一些元素,但正如下面的简化示例代码所示,如​​果不删除最后一个元素,它会起作用,但如果我们希望删除最后一个元素,它会失败。 下面的代码工作正常:

import numpy as np

values = np.array([0,1,2,3,4,5])
print values
for i in [3,4,1]:
    values = np.delete(values,i)
print values

输出是:

[0 1 2 3 4 5]
[0 2 4]

如果我们只把4改成5,那么就会失败:

import numpy as np

values = np.array([0,1,2,3,4,5])
print values
for i in [3,5,1]:
    values = np.delete(values,i)
print values

错误信息:

IndexError: index 5 is out of bounds for axis 0 with size 5

为什么只有删除最后一个元素才会出现此错误?完成此类任务的正确方法是什么?


请记住, np.delete(arr, ind) 删除索引处的元素ind不是具有该价值的人。

这意味着当你删除东西时,数组会变得更短。所以你从

values = [0,1,2,3,4,5]
np.delete(values, 3) 
[0,1,2,4,5]  #deleted element 3 so now only 5 elements in the list
#tries to delete the element at the fifth index but the array indices only go from 0-4
np.delete(values, 5) 

解决问题的方法之一是按降序对要删除的索引进行排序(如果您确实要删除数组)。

inds_to_delete = sorted([3,1,5], reverse=True) # [5,3,1]
# then delete in order of largest to smallest ind

Or:

inds_to_keep = np.array([0,2,4])
values = values[inds_to_keep]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 numpy 数组中删除一些元素 的相关文章

随机推荐