我想阅读多个文件的内容,单独处理他们的数据(因为性能和硬件资源),并将我的结果写入一个大的文件中。 netCDF4文件。
现在我能够读取文件,处理他们的数据,但是我很难处理生成的多个数组。我无法正确合并它们。
我有一个包含每天计算值的3d数组(时间,长度,纬度)。我喜欢做的是在将它写入我的netCDF4文件之前将我所拥有的所有数组合并到一个大数组中。 (一个阵列中的所有日子)
这里有两个示例数组:
我的预期结果是:
我怎样才能实现这种结构?
allDays=day1+day2
我的数据将被汇总。我使用时:
allDays=[]
allDays.append(day1)
allDays.append(day2)
我的数据将被新数组包围。
仅供参考:我使用的是Ubuntu 14.04和Python:3.5(Anaconda)
答案 0 :(得分:5)
当你这样做时
allDays=[]
allDays.append(day1)
allDays.append(day2)
您正在制作指向现有数据的指针列表,而不是重新打包数据。你可以这样做:
allDays=[]
allDays.append(day1[:])
allDays.append(day2[:])
现在它将把数据从day1复制到新的allDays数组中。这会使内存使用量增加一倍,因此最好在每次添加到allDays后发出del day1
。
说了这么多,如果你使用Pandas(通常推荐用于时间序列数据)或Numpy,这整个事情会更快,并且使用更少的内存。 Numpy数组不能保存像python列表那样的指针,所以隐含了副本。希望为你清除一些东西:)我也强烈推荐Ned的this video
答案 1 :(得分:2)
让我们从一些随机数据开始。
>>> import numpy as np
>>> day1 = np.random.randint(255, size=(1, 81, 141))
您的数组的维度大小为1,因此每次要访问元素时,您都必须痛苦地键入day1[0,x,y]
。您可以使用np.squeeze()
删除所需的维度。
>>> day1[0,50,50]
36
>>> day1 = np.squeeze(day1)
>>> day1.shape
(81, 141)
>>> day1[50,50]
36
现在让我们再做一些。
>>> day2 = np.random.randint(255, size=day1.shape)
>>> day3 = np.random.randint(255, size=day1.shape)
您可以将所有这些内容放在一个大列表中并将其传递给np.array()
,这会创建一个大小为(N, 81, 141)
的数组,其中N
是您拥有的天数。< / p>
>>> allDays = np.array([day1, day2, day3])
>>> allDays.shape
(3, 81, 141)
来自day1
的所有数据都在索引0中,来自索引1中的day2
,等等。
>>> allDays[0,50,50]
36
答案 2 :(得分:1)
使用allDays = np.concatenate((day1, day2))
。
答案 3 :(得分:0)
现在你可以用 python 3 做这样的事情:
tst1 = [1, 2, 3]
tst2 = [4, 5, 6]
ts3 = [*tst1, *tst2]
结果:[1, 2, 3, 4, 5, 6]