首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何为滤波后的二维数组重建线性索引?

如何为滤波后的二维数组重建线性索引?
EN

Stack Overflow用户
提问于 2022-08-02 00:00:16
回答 1查看 32关注 0票数 -2

假设我有下面的numpy数组

代码语言:javascript
代码运行次数:0
运行
复制
>>> arr = np.array([[0,1,0,1],
                    [0,0,0,1],
                    [1,0,1,0]])

其中0值表示“有效”值,1值表示“无效”值。接下来,假设我筛选出无效的1值如下:

代码语言:javascript
代码运行次数:0
运行
复制
>>> mask = arr == 1
>>> arr_filt = arr[~mask]
array([0, 0, 0, 0, 0, 0, 0])

如果我想从原始arr中的有效值的线性索引(arr)转到新过滤的arr_filt中相同值的线性索引,则可以进行如下操作:

代码语言:javascript
代码运行次数:0
运行
复制
# record the cumulative total number of invalid values
num_invalid_prev = np.cumsum(mask.flatten())

# example of going from the linear index of a valid value in the
# original array to the linear index of the same value in the
# filtered array
ij_idx = (0,2)
linear_idx_orig = np.ravel_multi_index(ij_idx,arr.shape)
linear_idx_filt = linear_idx_orig - num_invalid_prev[linear_idx_orig]

不过,我有兴趣走另一条路。也就是说,给定过滤后的arr_filt中的有效值的线性索引和相同的num_invalid_prev数组,我可以在未过滤的arr中返回相同有效值的线性索引吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-02 03:17:41

您可以使用np.nonzero()获取索引:

代码语言:javascript
代码运行次数:0
运行
复制
ix = np.c_[np.nonzero(~mask)]
>>> ix
array([[0, 0],
       [0, 2],
       [1, 0],
       [1, 1],
       [1, 2],
       [2, 1],
       [2, 3]])

然后,您可以查找第二个有效值的索引:

代码语言:javascript
代码运行次数:0
运行
复制
>>> tuple(ix[1])
(0, 2)

>>> arr[tuple(ix[1])]
0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73200656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档