【问题标题】:Acces numpy array with potentially out of bounds index访问可能超出范围索引的 numpy 数组
【发布时间】: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 &lt; len(arr)] ?
  • @MichaelSzczesny 啊,谢谢,这正是我想要的。将其发布为答案,我会接受它
  • @gustavz - 我认为它已回答 here 但感觉不像是重复的。
  • 部分是的,但如果您添加index_invalid = index[index &gt;= len(arr)]; arr_desired = arr[index_valid],这是对问题的完整答案

标签: python arrays numpy


【解决方案1】:

我正在发布@Michael Szczesny 的扩展评论作为答案:

index_valid = index[index < len(arr)]
index_invalid = index[index >= len(arr)]
arr_desired = arr[index_valid]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多