首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数组中获取掩码

从数组中获取掩码
EN

Stack Overflow用户
提问于 2013-09-12 13:38:56
回答 2查看 1.1K关注 0票数 2

假设我有一个numpy数组

代码语言:javascript
复制
a = np.array([0, 8, 25, 78, 68, 98, 1])

和一个掩码阵列b = [0, 1, 1, 0, 1]

是否有一种简单的方法可以获得以下数组:

[8, 25, 68] --它是原始数组中的第一个、第二个和第四个元素。听起来像是我的面具。

我尝试过的最明显的方法是ab,但这并不能产生理想的结果。在此之后,我试图查看numpy的蒙面操作,但它似乎引导我朝着错误的方向前进。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-12 13:43:52

如果ab都是numpy数组,并且b严格地是1和0:

代码语言:javascript
复制
>>> a[b.astype(np.bool)]
array([ 8, 25, 68])

应该指出的是,对于极小的案件而言,这一速度要快得多,而且范围比@falsetru的回答要有限得多:

代码语言:javascript
复制
a = np.random.randint(0,2,5)

%timeit a[a==1]
100000 loops, best of 3: 4.39 µs per loop

%timeit a[a.astype(np.bool)]
100000 loops, best of 3: 2.44 µs per loop

在更大的情况下:

代码语言:javascript
复制
a = np.random.randint(0,2,5E6)

%timeit a[a==1]
10 loops, best of 3: 59.6 ms per loop

%timeit a[a.astype(np.bool)]
10 loops, best of 3: 56 ms per loop
票数 3
EN

Stack Overflow用户

发布于 2013-09-12 13:42:27

代码语言:javascript
复制
>>> a = np.array([0, 8, 25, 78, 68, 98, 1])
>>> b = np.array([0, 1, 1, 0, 1])
>>> a[b == 1]
array([ 8, 25, 68])

替代使用itertools.compress

代码语言:javascript
复制
>>> import itertools
>>> list(itertools.compress(a, b))
[8, 25, 68]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18765904

复制
相关文章

相似问题

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