说我得到一个大小为[1 x 300]的向量,其中每个元素都由0或1组成。在运行时,我可能需要迭代地存储一堆这样的向量。如何有效地表示它以便有效地存储它们( python )?
我猜有两种方法可以做到。第一种方法是执行类似位图的操作(它们甚至在python中都有)吗?
第二种方法 我当时想也许是存储1的位置。
例如[0,1,1,1]。我将它们存储为[1,2,3]。
有什么想法吗?
答案 0 :(得分:3)
通常在栅格填充形状处理(通常具有较大均匀区域)中使用的另一种方法是将数据存储为跨度,即仅存储每次运行的0或1s的长度(本质上是RLE和每次运行都隐含在该位置中)。您可以任意选择第一个值(因此,所有偶数值)都代表0s,而第二个值(因此,所有奇数值)都代表1s。因此,类似
0 0 0 0 0 1 1 0 0 0 1 1 1 1
成为
5 2 3 4
附加到这样的结构很简单:
def append(l, value):
cur = (len(l) + 1) % 2
if value == cur:
l[-1] += 1
else:
l.append(1)
答案 1 :(得分:0)
您可以使用zlib进行数据压缩。
>>> import zlib
>>> vector = [1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1] # small sample
>>> compressed = zlib.compress(bytearray(vector))
>>> compressed
b'x\x9ccd`ddd\x00\x02FF\x00\x001\x00\x07'
>>> list(zlib.decompress(compressed))
[1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1]
Python也支持efficient arrays of numeric values,这可能对您有用。