我的问题与此类似
Get value at list/array index or "None" if out of range in Python
但是我想使用多维numpy数组。
可以在不事先检查索引的情况下完成此操作吗?
data = np.ones((2,3,4))
idx1 = [0,1]
idx2 = [1,2]
idx3 = [0, 100]
data[idx1, idx2, idx3]
所需的输出:
array([1., np.nan])
答案 0 :(得分:0)
提供我们的数据
import numpy as np
data = np.ones((2,3,4))
idx = [[0,1], [1,2], [0, 100]]
shape = np.array(data.shape)
您可以使用
获取任何超出原始数组的索引列invalids = np.any(idx > shape[:, None] - 1, axis=0)
并使用
将索引裁剪为有效值valids = np.clip(idx, 0, shape[:, None] - 1)
这些索引可用于索引我们的数组
out = data[valids.tolist()]
和无效索引的掩码可用于将离群值设置为nan
out[invalids] = np.nan
# array([ 1., nan])