python数组过滤越界

时间:2016-07-19 01:23:35

标签: python arrays numpy

我尝试在python中执行此操作,但是我收到错误:

import numpy as np
array_to_filter = np.array([1,2,3,4,5])
equal_array = np.array([1,2,5,5,5])
array_to_filter[equal_array]

,结果是:

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

是什么给出的?我以为我在这里做了正确的操作。

我希望如果我这样做

array_to_filter[equal_array]

它会返回

np.array([1,2,5])

如果我没有走上正轨,我将如何做到这一点?

2 个答案:

答案 0 :(得分:0)

在最后一个语句中,数组的索引是1,2,5,5和5.索引5指的是数组中的第6个元素,而您只有5个元素。 array_to_filter[5]不存在。

[i for i in np.unique(equal_array) if i in array_to_filter]

会返回你想要的答案。如果它也存在于array_to_filter

中,则返回equal_array中的每个唯一值

答案 1 :(得分:0)

如果array_to_filter保证具有唯一值,您可以执行以下操作:

>>> array_to_filter[np.in1d(array_to_filter, equal_array)]
array([1, 2, 5])

对于1-D序列,documentationnp.in1d可以被视为python关键字in的元素功能版本。 in1d(a, b)大致相当于np.array([item in b for item in a])