【发布时间】:2016-05-12 16:04:48
【问题描述】:
我需要一种方法将 2000 万个 32 位和 64 位整数转换为相应的位数组(因此这必须是内存/时间效率的)。根据 SO 上另一个 question/answer 的建议,我试图通过使用 numpy.unpackbits 来做到这一点。在尝试这种方法时,我遇到了意想不到的结果:
np.unpackbits(np.array([1], dtype=np.uint64).view(np.uint8))
产生:
array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=uint8)
我希望1 元素是最后一个,但不是在中间。所以我显然错过了保留字节顺序的东西。我错过了什么?
【问题讨论】:
-
我没有看到证明这一点的文档,但我假设当我创建一个 int64 类型的数组并用更小的数据填充它时,每个元素都会被转换为 long。 IE。相当于 C 中的强制转换,应该用
0s 填充高阶位。 -
2000万!但我希望不要手工编辑O_o
-
This answer 建议您阅读this link。
-
@StevenRumbalski:我不能。
np.unpackbits需要一个字节数组 -
@Robᵩ:这就是我得到这个想法的问题/答案。我确实查看了该链接,但我认为它不适用于此处,因为我的数据 (
1) 是在运行 python 进程的同一台计算机上生成的。我可以再看看其他线索。
标签: python python-3.x numpy