簡體   English   中英

如何在python中合並多個數組?

[英]How to merge multiple arrays in python?

我想讀取多個文件的內容,單獨處理它們的數據(由於性能和硬件資源)並將我的結果寫入一個“大”netCDF4 文件。

現在我能夠讀取文件,處理它們的數據,但我對由此產生的多個數組感到困惑。 我無法正確合並它們。

我有一個 3d 數組 (time,long,lat) 包含我每天計算的值。 我喜歡做的是在將所有數組合並到一個大數組中,然后再將其寫入我的 netCDF4 文件。 (所有天都在一個數組中)

這里有兩個示例數組:

  • 第1天[19790101][-25][35]=95
  • 第2天[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)

當你做

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

您正在制作指向現有數據的指針列表,而不是重新打包數據。 你可以這樣做:

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

現在它會將數據從 day1 復制到新的 allDays 數組中。 這將使您的內存使用量加倍,因此最好在每次添加到 allDays 后發出del day1

話雖如此,如果您使用 Pandas(通常推薦用於時間序列數據)或 Numpy,整個過程會快得多,而且使用的內存也少得多。 Numpy 數組不能像 python 列表那樣保存指針,因此隱含了副本。 希望能為你解決一些問題:) 我也強烈推薦 Ned 的這個視頻

讓我們從一些隨機數據開始。

>>> 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是您擁有的天數。

>>> allDays = np.array([day1, day2, day3])
>>> allDays.shape
(3, 81, 141)

day1所有數據都在索引 0 中,第 2 天的所有數據都在索引 1 中, day2

>>> allDays[0,50,50]
36

使用allDays = np.concatenate((day1, day2))

現在你可以用 python 3 做這樣的事情:

tst1 = [1, 2, 3]
tst2 = [4, 5, 6]

ts3 = [*tst1, *tst2]

結果: [1, 2, 3, 4, 5, 6]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM