Numpy 对非常大的一维阵列进行排序

Numpy 对非常大的一维阵列进行排序,numpy,pandas,pytables,Numpy,Pandas,Pytables,我将要第一次尝试Pytables,我需要在每个时间步将数据写入hdf文件。我将有超过100000个时间步。完成后,我想按第2列对100000+x6数组进行排序,也就是说,我目前按时间对所有内容进行排序,但现在我需要按降雨率递减的顺序(第2列)对数组进行排序。我甚至不知道如何从这里开始。我知道将整个阵列存储在内存中是不明智的。有没有办法快速有效地完成这个任务 谢谢你的建议 我知道将整个阵列存储在内存中是不明智的 你可能想得太多了。一个100K x 6的float64数组只需要~5MB内存。在我的计

我将要第一次尝试Pytables,我需要在每个时间步将数据写入hdf文件。我将有超过100000个时间步。完成后,我想按第2列对100000+x6数组进行排序,也就是说,我目前按时间对所有内容进行排序,但现在我需要按降雨率递减的顺序(第2列)对数组进行排序。我甚至不知道如何从这里开始。我知道将整个阵列存储在内存中是不明智的。有没有办法快速有效地完成这个任务

谢谢你的建议

我知道将整个阵列存储在内存中是不明智的

你可能想得太多了。一个100K x 6的float64数组只需要~5MB内存。在我的计算机上,对这样一个数组进行排序大约需要27毫秒:

In [37]: a = np.random.rand(100000, 6)

In [38]: %timeit a[a[:,1].argsort()]
10 loops, best of 3: 27.2 ms per loop

除非您有一台非常旧的计算机,否则您应该将整个阵列放入内存中。假设它们是浮点数,只需要
100000*6*4./2**20=2.29
Mb。双打是双打的两倍。您可以使用numpy的sort或argsort进行排序。例如,您可以从第二列获取排序索引:

import numpy as np
a = np.random.normal(0, 1, size=(100000,6))
idx = a[:, 1].argsort()
然后使用这些来索引所需的列或整个数组:

b = a[idx]
您甚至可以使用不同类型的排序并检查其速度:

In [33]: %timeit idx = a[:, 1].argsort(kind='quicksort')
100 loops, best of 3: 12.6 ms per loop

In [34]: %timeit idx = a[:, 1].argsort(kind='mergesort')
100 loops, best of 3: 14.4 ms per loop

In [35]: %timeit idx = a[:, 1].argsort(kind='heapsort')
10 loops, best of 3: 21.4 ms per loop

因此,您可以看到,对于这种大小的数组,它实际上并不重要。

or有什么问题?顺便说一句,10万行,每个行有6个字段并不多,只要字段是数字(大约5 MB)。我不知道这些排序函数。谢谢你的提示。我试试看。谢谢。我想我可能低估了数组的大小。在时间指数超过3.3亿之前,我在numpy做过这件事。我忘了把它乘以lat和lone。随着我处理水平分辨率越来越高的数据,大小也会增加。谢谢你的提示。我正在编写代码并修改我的旧numpy脚本。