如何为IndexError的索引或NaN获取numpy ndarray的值?

时间:2019-02-15 10:39:37

标签: python numpy numpy-ndarray

我的问题与此类似

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])

1 个答案:

答案 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])