在大量数据点和长时间内运行过滤器?

时间:2014-05-13 10:33:44

标签: python arrays numpy

我需要对大量数据应用两个运行过滤器。我已经读过,动态创建变量不是一个好主意,但我想知道它是否仍然是我的最佳解决方案。

我的问题: 我可以借助计数器(array1,array2 ...)在循环中创建数组,然后用计数器调用它们(例如:'array'+ str(counter)或'array'+ str(counter-1)?

为什么我要这样做: 数据是400x700阵列,一年内持续15分钟的时间步长(所以我有35000个400x700阵列)。每个时间步骤都单独读入python。现在我需要应用一个运行过滤器来检查最后四个时间步长是否相等(元素方面),如果它们是,则所有四个值都设置为零。下一个过滤器在第一个过滤器运行后使用数据,并检查最后十二个时间步长的总和是否超过某个值。当两个过滤器完成后,我想总结这些值,以便在年底我有一个400x700数组,其中包含过滤的累计值。

我没有足够的内存来同时读取所有数据。所以我想我可以创建一个循环,每个步骤创建一个400x700阵列的新变量并运行两个过滤器。过滤的旧数组然后我可以添加到年度总和并删除,这样我内存中的时间步长(数组)就不会超过16(4 + 12)。

如果我在没有任何代码的情况下提出这样的问题,我现在不是正确的,但我真的很感激帮助。

2 个答案:

答案 0 :(得分:0)

如果您的问题是关于将一​​定数量的数组保留在内存中的最佳数据结构,在这种情况下我建议使用三维数组。它的形状为(400, 700, 12),因为十二是你需要回顾多少个数组。 优点是因为您将新数组加载到较大的数组中,因此您的内存使用将保持不变。 缺点是您需要手动移动所有阵列。

如果您不想处理自己的转变,我建议您使用deque,其中maxlen为12。

答案 1 :(得分:0)

  

"我可以借助计数器(array1,array2 ...)在循环中创建数组,然后使用计数器调用它们(例如:'array'+ str(counter)或'array'+ ?STR(计数器-1)"

这是一个非常常见的问题,我认为很多程序员最终会面对这个问题。 Stack Overflow上的Python的两个例子:

从中学到的教训是不使用动态变量名称,而是将您想要使用的数据部分放在一个包含数据结构中。

数据结构可以是例如是listdict或Numpy数组。 @Midnighter提出的collections.deque似乎也是这种运行过滤器的理想选择。