【发布时间】:2022-01-12 13:37:03
【问题描述】:
我的索引 index 可能超出数组 arr 的范围。
IndexError: index 3 is out of bounds for axis 0 with size 3
如何仅访问arr 的有效索引index_valid 并将无效索引index_invalid 作为另一个变量?
例子:
arr = np.array([1,2,3])
index = np.array([1,2,3])
if index.min() >= len(arr):
index_valid = np.array([])
index_invalid = index
arr_desired = np.array([])
else:
index_valid = np.array([i for i in index if i<len(arr)])
index_invalid = np.array([i for i in index if i>=len(arr)])
arr_desired = arr[index_valid]
重要提示:解决方案必须对index 中的所有索引都不在arr 中的情况具有鲁棒性。
此外,我正在寻找类似 @987654331@ 的解决方案,不带 listcomps,如果可能的话,不带 if 语句。
【问题讨论】:
-
根据数组形状测试索引。
-
IIUC:
index_valid = index[index < len(arr)]? -
@MichaelSzczesny 啊,谢谢,这正是我想要的。将其发布为答案,我会接受它
-
@gustavz - 我认为它已回答 here 但感觉不像是重复的。
-
部分是的,但如果您添加
index_invalid = index[index >= len(arr)]; arr_desired = arr[index_valid],这是对问题的完整答案