将零和一的 numpy 数组转换为二进制数数组
Converting a numpy array of zeros and ones into an array of binary numbers
我正在寻找一种高效的转向方式
a=np.array([[0,1,1,0],
[0,1,1,1]])
进入
b=np.array([[0b0110],
[0b0111]])
或进入
b=np.array([[6],
[7]])
到目前为止我唯一发现的是 np.packbits 但这只适用于 8 位数字。但是我的数组的形状约为 (20e6,20)
我当然可以手工完成:
a=np.array([[0,1,1,0],[0,1,1,1]])
c=2**np.arange(np.shape(a)[-1])[::-1]
b=a.dot(c)
b
Out: array([6, 7])
但我认为有更快的方法。特别是如果可以直接转换为二进制数组。
感谢帮助!
np.packbits
这样做。但是,结果数组的位存储在 np.uint8
项的块中。这意味着 a.shape[1] <= 8
必须为真。此外,它在右边打包位(在 bigendian 模式下),因此您需要移动值。这是结果代码:
np.packbits(a, bitorder='big', axis=1) >> (8-a.shape[1])
如果您需要代码与 a.shape[1] > 8
一起使用,那么您可以编写基于 的 Numba 代码。
我正在寻找一种高效的转向方式
a=np.array([[0,1,1,0],
[0,1,1,1]])
进入
b=np.array([[0b0110],
[0b0111]])
或进入
b=np.array([[6],
[7]])
到目前为止我唯一发现的是 np.packbits 但这只适用于 8 位数字。但是我的数组的形状约为 (20e6,20)
我当然可以手工完成:
a=np.array([[0,1,1,0],[0,1,1,1]])
c=2**np.arange(np.shape(a)[-1])[::-1]
b=a.dot(c)
b
Out: array([6, 7])
但我认为有更快的方法。特别是如果可以直接转换为二进制数组。
感谢帮助!
np.packbits
这样做。但是,结果数组的位存储在 np.uint8
项的块中。这意味着 a.shape[1] <= 8
必须为真。此外,它在右边打包位(在 bigendian 模式下),因此您需要移动值。这是结果代码:
np.packbits(a, bitorder='big', axis=1) >> (8-a.shape[1])
如果您需要代码与 a.shape[1] > 8
一起使用,那么您可以编写基于