我有一个介于0和3之间的数字数组,我想创建一个二进制数字的2D数组
在将来,我可能需要一个介于0到7或0到15之间的数字数组
当前我的数组定义如下:
a = np.array([[0], [1], [2], [3]], dtype=np.uint8)
我使用了numpyunpackbits
函数:
b = np.unpackbits(a, axis=1)
结果是:
array([[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 1, 1]], dtype=uint8)
正如您所见,它创建了一个二维数组,其中列中有8个项目,而我正在查找2列二维数组
这是我想要的数组:
array([[0, 0],
[0, 1],
[1, 0],
[1, 1]])
这与数据类型uint8
有关吗
你的想法是什么
解决此问题的一种方法是通过简单的切片调整
b
以匹配所需的输出,类似于@GrzegorzSkibinski answer中所建议的:或者,您可以创建一个查找表,类似于@WarrenWeckesser answer中所建议的,使用以下命令:
允许所有类型的用途,例如:
编辑
考虑@PaulPanzer answer行:
已替换为:
哪个内存效率更高
它本可以被以下内容取代:
具有类似的效果
您可以截断
b
以仅保留自第一列1
起的列:您可以使用
count
关键字。它从右侧剪切,因此在应用unpackbits
之前还必须移位位这将生成一个“干净”数组:
相反,切片
unpackbits
的完整8列输出在某种意义上是内存泄漏,因为只要切片存在,被丢弃的列就会留在内存中相关问题 更多 >
编程相关推荐