使用包含越界值的另一个数组对numpy数组进行索引

5

给定以下数据数组:

d=np.array([10,11,12,13,14]) 

还有另一个索引数组:

i=np.array([0, 2, 3, 6])

如何以良好的方式使用id [i] )索引d,以便在6时不会出现索引超出范围的错误,而是得到:

np.array([10, 12, 13])
3个回答

4
也许可以使用 i[i < d.size] 来获取小于 d 长度的元素:
print(d[i[i < d.size]])
[10 12 13]

直接使用掩码也可以:d[i<d.size] - Divakar
@Divakarm 谢谢,那样会更好一些,但是这样会得到10、11、12吗?还是我理解错了什么? - Padraic Cunningham
@Divakar,没关系,d.size仍然比len更好。 - Padraic Cunningham
1
我喜欢这个,简洁明了。 - Andrzej Pronobis
1
@而且,这是我能提供的最好的,可能还有更好的方法,但我不知道! - Padraic Cunningham

4

在使用i之前,清理它非常容易:

In [150]: d[i[i<d.shape[0]]]
Out[150]: array([10, 12, 13])

np.take 有几种处理越界索引的 modes,但 'ignore' 不是其中之一。


感谢有关“take”的提示。我在发布问题后找到了它,但确实找不到“ignore”。Padraic Cunningham首先提出了主要想法 :) - Andrzej Pronobis

0
valid_indices = i[(i >= 0) & (i < len(d))]
selected_items = d[valid_indices]

NumPy似乎没有提供一种错误处理模式,可以跳过无效的索引,这可能是因为在结果数组是多维的情况下跳过它们并没有太多意义。相反,只需选择处于有效范围内的i元素,并使用这些元素进行索引。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接