- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 python
中使用Bitmasks
。据我所知,这些是整数数组,当它们解压缩为二进制格式时,它们会告诉您数组中给定元素的 32 位中的哪一个被设置 (=1)。
我想知道检查数组的任何元素是否设置了 4 个特定位的最快方法。我不关心其余的。我已经尝试了以下解决方案,但它对于我的目的来说不够快:
def detect(bitmask, check=(18,22,23,24), bits=32):
boolmask = np.zeros(len(bitmask), dtype=bool)
for i, val in enumerate(bitmask):
bithost = np.zeros(bits, dtype='i1')
masklist = list(bin(val)[2:])
bithost[:len(masklist)] = np.flip(masklist,axis=0)
if len(np.intersect1d(np.nonzero(bithost)[0] ,check)) != 0:
boolmask[i] = True
else:
boolmask[i] = False
if any(boolmask):
print("There are some problems")
else:
print("It is clean")
例如,如果给定的位掩码
包含整数24453656(二进制为1011101010010001000011000)
,函数检测的输出 将是“存在一些问题”,因为设置了第 22 位:
bit: ... 20, 21, 22, 23, 24,...
mask: ... 0, 0, 1, 0, 0,...
关于如何提高性能有什么想法吗?
最佳答案
整数只不过是计算机中的位序列。
所以,如果你得到整数,假设:333 对于计算机来说是一个位序列 101001101。它不需要任何解包。它是位。
因此,如果掩码也是整数,则不需要任何拆包,只需对其进行按位运算即可。检查wikipedia了解它们如何工作的详细信息。
为了检查整数 abc 中是否设置了任何位 xyz,您可以执行以下操作:(abc & xyz) > 0
。如果您绝对需要检查掩码是否为位元组,则可以进行一些打包,如下所示:
def detect(bitmask,check=(18,22,23,24)):
checkmask=sum(2**x for x in check)
if (bitmask & checkmask) > 0:
print "There are some problems"
else:
print "Everything OK"
请注意,位掩码以基于 0 的位索引开头。第一个位是位 0。
关于python - 检查位掩码的特定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53724160/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
正如您在 this travis.yml 中看到的那样文件,我的代码依赖于一些第三方库,我在构建项目之前将它们安装在远程系统上。 Travis 每次推送提交时都会下载并构建这些库,这可以避免吗?我的意
我是一名优秀的程序员,十分优秀!