[英]How to merge multiple arrays in python?
我想讀取多個文件的內容,單獨處理它們的數據(由於性能和硬件資源)並將我的結果寫入一個“大”netCDF4 文件。
現在我能夠讀取文件,處理它們的數據,但我對由此產生的多個數組感到困惑。 我無法正確合並它們。
我有一個 3d 數組 (time,long,lat) 包含我每天計算的值。 我喜歡做的是在將所有數組合並到一個大數組中,然后再將其寫入我的 netCDF4 文件。 (所有天都在一個數組中)
這里有兩個示例數組:
我的預期結果是:
我怎樣才能達到這種結構?
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.