滚动大数据集的中位数 - python

时间:2015-07-08 18:11:39

标签: python numpy pandas scipy median

我有一个200K行的巨大文件,我需要通过计算每行中不同的单词来找出滚动中位数。

我使用numpy来计算中位数,如下所示

   a = np.array([])
   np.insert(a, 0, len(unique_word_list_by_line))
   median = np.median(a)

我觉得这不高效,因为numpy每次插入元素时都会创建一个新数组。有没有办法将元素插入到numpy数组中?

由于

2 个答案:

答案 0 :(得分:3)

动态填充numpy数组永远不会有好处,它涉及调整大小和复制。

滚动中位数似乎并非微不足道。 This blog article讨论了不同的实现,例如Skip list

编辑:看来你用的是熊猫。在pandas中,使用跳过列表并跳过已经实现的NaN的实现。看看here

在纯python中实现它的配方也可以找到here

答案 1 :(得分:1)

我建议这样做。假设您已将文本文件加载到file,则可以将列表a创建为:

a = []
for line in file:
    a.append(num_unique_words(line))

我假设你有一个函数num_unique_words来计算字符串中唯一单词的数量。

现在将其转换为数组:

a = np.array(a)

现在将views上的np.median调用到数组中(请注意,视图是由slicing数组创建的:

median = np.empty_like(a)
for idx in xrange(len(a)):
    median[idx] = np.median(a[:idx])