【发布时间】:2014-01-12 23:13:51
【问题描述】:
假设我有一个非常大的np.array,其中包含 N 个元素,并且我只想选择一些通过 S 选择的值。通常的方式是:
selected_items = original_array[selection1(original_array) & original_array > 3]
这很好,但使用了大量的临时内存。如果我是正确的,我需要 S 个大小为 N 的布尔值掩码,再加上至少一个用于 & 结果的掩码。在内存使用方面有更好的解决方案吗?例如显式循环不需要这个:
selected_items = []
tests = (selection1, lambda x: x > 3)
for x in orignal_items:
if all( (t(x) for t in tests) ):
selected_items.append(x)
我喜欢numpy,但它的设计真的是内存渴望,所以似乎不适合处理大数据。另一方面,python 中的显式循环不是很高效。
numpy 有解决办法吗?
还有其他基于 python 的大数据分析框架吗?
【问题讨论】:
-
恕我直言,如果您有
N的空间,那么为3*N需要空间似乎不是什么大问题。我们不是在谈论像O(N^2)这样的内存扩展。 This link 可能会感兴趣 -
这是一个简单的例子。在我的现实生活中,不幸的是 numpy(如 Matlab、Mathematica、...)似乎不是正确的工具,因为它们将所有值都存储在内存中。我有绅士,每个条目都有数百个字段。