如何在python中合并多个数组?

时间:2016-03-13 18:07:18

标签: python arrays numpy

我想阅读多个文件的内容,单独处理他们的数据(因为性能和硬件资源),并将我的结果写入一个大的文件中。 netCDF4文件。

现在我能够读取文件,处理他们的数据,但是我很难处理生成的多个数组。我无法正确合并它们。

我有一个包含每天计算值的3d数组(时间,长度,纬度)。我喜欢做的是在将它写入我的netCDF4文件之前将我所拥有的所有数组合并到一个大数组中。 (一个阵列中的所有日子)

这里有两个示例数组:

  • DAY1 [19790101] [ - 25] [35] = 95
  • DAY2 [19790102] [ - 15] [25] = 93

我的预期结果是:

  • ALLDAYS [19790101] [ - 25] [35] = 95
  • ALLDAYS [19790102] [ - 15] [25] = 93

我怎样才能实现这种结构?

  • 当我使用时:allDays=day1+day2我的数据将被汇总。
  • 我使用时:

    allDays=[]
    allDays.append(day1)
    allDays.append(day2)
    

    我的数据将被新数组包围。

仅供参考:我使用的是Ubuntu 14.04和Python:3.5(Anaconda)

4 个答案:

答案 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]