【问题标题】:Choice of Dimension on Numpy ArraysNumpy 数组的维度选择
【发布时间】:2014-02-20 11:38:40
【问题描述】:
我有一个要分析的数据集。它由
- 测量,总数
m,大约是2 000 000。
- 每个测量都包含
v 变量。 (在这种情况下大约 10 个)
我可以命名每个变量(foo、bar 等)并为每个变量选择一个 datatype,例如 uint32。
我要计算统计数据(如foo的平均值)并绘制绘图(如foo vs bar的散点图) .
我应该为我的数据选择哪种表示形式(或者这是否重要)?
如果为每个变量分配一个连续的内存块,我通常会期待更好的性能,但如果有人提供明确的答案,我会很高兴被证明是错误的。
额外问题:迭代构建数组的最佳方法?
【问题讨论】:
标签:
python
arrays
memory
numpy
multidimensional-array
【解决方案1】:
第一件事:记住,过早的优化是万恶之源。如果您怀疑某些东西很慢,您可以随时使用 timeit 模块。
至于你的问题,我存储我的数据,以便测量按行索引,维度按列索引。这样,测量本身(可能*)将是连续的记忆。但真正的原因是如果我有测量值 M.shape = (m, v)
然后 M[n] 将访问第 n 个测量值,这很适合整理代码。
*一个 numpy 数组可能不是连续的,如果它被奇怪地构建,它是内存。 np.ascontinuous 将解决此问题。
奖励:
如果您要反复构建一个数组,最好不要使用 numpy 数组开始。它们并不意味着可以轻松调整大小。我会将您的所有数据存储在 python 列表中,并使用 append 函数添加新的测量值。然后,当您需要将数据放入 numpy 时,您可以在 python 列表中调用 np.array ,它会复制数据,以便对其执行有效的操作。但是对于动态存储,请使用 python 列表。他们非常有效率。