首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于给定位信息的Numpy阵列指标提取

基于给定位信息的Numpy阵列指标提取
EN

Stack Overflow用户
提问于 2014-10-18 05:47:07
回答 2查看 310关注 0票数 1

我的数据以‘32位无符号整数’的形式出现,如下所示:

代码语言:javascript
复制
myData = np.array([1073741824, 1073741877, 1073742657, 1073742709, 1073742723, 1073755137, 1073755189,1073755969],dtype=np.uint32)

我希望获得“myData”元素的索引,其中发生以下情况:

代码语言:javascript
复制
Bit No. 0–1
Bit Combination: 00

我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-18 06:27:38

您可以使用np.binary_repr()获取表示每个元素的字符串,并从该字符串获取与您的条件匹配的元素:

代码语言:javascript
复制
end = `00`
s = [np.binary_repr(ai, width=len(end)) for ai in myData]
indices = [i for (i, si) in enumerate(s) if si.endswith(end)]

编辑:矢量化(并推荐)方法

在进一步研究之后,我发现您可以在处理数组的np.unpackbits()视图之后使用uint8

代码语言:javascript
复制
myData = myData.view(np.uint32) # not needed if it is already np.uint32
tmp = np.unpackbits(myData.view(np.uint8)[::4][None, :], axis=0)
indices = np.where((tmp[-2, :] == 0) & (tmp[-1, :] == 0))[0]

请注意,切片是根据您正在比较的位来获取的:

  • 前8位的[::4]
  • 第9位至第16位的[1::4]
  • 第17至第24位的[2::4]
  • 第25位至32位的[3::4]

例如,如果原始数据类型为np.uint64,则这个序列可能会继续下去,但在本例中,可以使用[n::8]

票数 3
EN

Stack Overflow用户

发布于 2015-10-04 08:34:47

我想说的是,典型的方法是:

代码语言:javascript
复制
np.flatnonzero((a & 0b11) == 0)

也就是说,屏蔽除后两位以外的所有位,并得到所有为零的索引。

这是短暂的,快速的,不作任何假设的endianness。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26436705

复制
相关文章

相似问题

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