python - 将 numpy 的 1 和 0 数组打包成 32 位值数组
问题描述
我在一个 numpy 整数数组中有一个 1 和 0 的一维数组,我想将这些值打包在一个无符号 32 位整数值数组中。
例如,假设整数数组是
{0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1
我想把它转换成这个
{0b01111111111000000000000111111111,0b11111111111111110000111111111111}
我怎样才能做到这一点?提前致谢
解决方案
您使用 bitshift 将数字移动到正确的二进制索引。然后只是累积值。
(d << np.arange(len(d))).sum()
这里有一个更广泛的版本:
# first, extend to a multiple of 32
d = np.append(d, np.zeros(len(d) & 31, dtype=d.dtype))
# reshape into Nx32
d = d.reshape((-1, 32))
# broadcasted bitshift
bits = d << np.arange(32, dtype=d.dtype))
# accumulate into one value per row
bits = bits.sum(axis=1)
推荐阅读
- python-3.x - 我的代码一直循环最后一部分并且不会打印
- mongodb - 在 fastify-session 上编写 set/get/destroy 方法以将会话存储到 MongoDB 中?
- python-3.x - pandas pivot 或 groupby 多列和控制列
- javascript - 如何在工具提示中显示 html 书中的注释?
- python - 如何在跨度级别使用 Qt 富文本中的 padding、margin 等?
- java - 为每个会话的一级缓存分配内存
- php - 在此 Codeigniter 3 应用程序中更新用户密码失败的原因是什么?
- tomcat - 关于 org.apache.tomcat.util.net。受体
- ansible - Ansible - 如何将上一个提示的答案包含到下一个提示中
- jetty - 在 Ktor 中使用 Jetty 嵌入式服务器获取客户端证书