【问题标题】:Compress long vector consists of 0 and 1压缩长向量由0和1组成
【发布时间】:2019-01-06 08:23:24
【问题描述】:

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


我想有两种方法可以做到这一点。第一种方法是做一些类似位图的事情(他们甚至在 python 中有这个)?

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

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

有什么想法吗?

【问题讨论】:

标签: python algorithm memory memory-management store


【解决方案1】:

在栅格填充形状处理(通常有大的统一区域)中经常使用的另一种方法是将数据存储为跨度,即仅存储 0 或 1 的每次运行的长度(本质上,它是 RLE 的项目每次运行都隐含在位置中)。您可以任意选择第一个值(因此,所有偶数值)代表一系列 0,而第二个(因此,所有奇数值)代表一系列 1。所以,像

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)

【讨论】:

  • 或者使用itertools [len(list(b)) for a, b in itertools.groupby(l)]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2015-02-06
相关资源
最近更新 更多