压缩长向量由0和1组成

时间:2018-07-30 06:16:05

标签: python algorithm memory memory-management store

说我得到一个大小为[1 x 300]的向量,其中每个元素都由0或1组成。在运行时,我可能需要迭代地存储一堆这样的向量。如何有效地表示它以便有效地存储它们( python )?


我猜有两种方法可以做到。第一种方法是执行类似位图的操作(它们甚至在python中都有)吗?

第二种方法 我当时想也许是存储1的位置。

例如[0,1,1,1]。我将它们存储为[1,2,3]。

有什么想法吗?

2 个答案:

答案 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,这可能对您有用。