And*_*nca 31 python boolean numpy
有没有办法在numpy中创建一个布尔数组,每个条目只使用1位?
标准np.bool
类型是1个字节,但这样我使用所需内存的8倍.
在谷歌上我发现C++有std::vector<bool>
.
Chr*_*rle 18
你想要一个比特币:
有效的布尔数组 - C扩展
该模块提供了一种有效表示布尔数组的对象类型.Bitarrays是序列类型,其行为与通常列表非常相似.八个位由连续的存储器块中的一个字节表示.用户可以在两种表示之间进行选择; little-endian和big-endian.所有功能都在C中实现.提供了用于访问机器表示的方法.当需要对二进制文件进行位级访问时,这可能很有用,例如便携式位图图像文件(.pbm).此外,在处理使用可变位长编码的压缩数据时,您可能会发现此模块很有用......
Sal*_*ali 15
为此,您可以使用numpy的本机packbits和unpackbits.第一个功能是直接使用,但要重建,您将需要额外的操作.这是一个例子:
import numpy as np
# original boolean array
A1 = np.array([
[0, 1, 1, 0, 1],
[0, 0, 1, 1, 1],
[1, 1, 1, 1, 1],
], dtype=np.bool)
# packed data
A2 = np.packbits(A1, axis=None)
# checking the size
print len(A1.tostring()) # 15 bytes
print len(A2.tostring()) # 2 bytes (ceil(15/8))
# reconstructing from packed data. You need to resize and reshape
A3 = np.unpackbits(A2, axis=None)[:A1.size].reshape(A1.shape).astype(np.bool)
# and the arrays are equal
print np.array_equal(A1, A3) # True
Run Code Online (Sandbox Code Playgroud)
Sco*_*ths 12
如果您创建一个ConstBitArray
或ConstBitStream
一个文件,它将使用mmap
而不是将其加载到内存中.在这种情况下,它不会是可变的,所以如果你想进行更改,它必须加载到内存中.
例如,无需加载到内存中即可创建:
>>> a = bitstring.ConstBitArray(filename='your_file')
Run Code Online (Sandbox Code Playgroud)
要么
>>> b = bitstring.ConstBitStream(a_file_object)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17592 次 |
最近记录: |