2017-08-06 63 views
1

我使用的是for循環在目錄中打開12個文件中,每個代表一個月份的一年,形狀如圖所示:結合numpy的陣列循環

(31, 180, 140) 
(28, 180, 140) 
(31, 180, 140) 
(30, 180, 140) 
(31, 180, 140) 
(30, 180, 140) 
(31, 180, 140) 
(31, 180, 140) 
(30, 180, 140) 
(31, 180, 140) 
(30, 180, 140) 
(31, 180, 140) 

我試圖用append來這些文件合併成一個列表,如圖所示:

directory = r"C:\Users\matth\Downloads\TRMM_3B42RT" 
for root, dirs, filenames in os.walk(directory): 
    precip_subsetland2010 = [] 
    for f in filenames: 
     if f.startswith("3B42RT_Daily.2010"): 
      log = open(os.path.join(root, f), 'r') 
      datapath2 = (("C:\\Users\\matth\\Downloads\\TRMM_3B42RT\\") + f) 
      f = Dataset(datapath2) 

      latbounds = [ -45 , -10 ] 
      lonbounds = [ 105, 150 ] 
      lats = f.variables['lat'][:] 
      lons = f.variables['lon'][:] 

      # latitude lower and upper index 
      latli = np.argmin(np.abs(lats - latbounds[0])) 
      latui = np.argmin(np.abs(lats - latbounds[1])) 

      # longitude lower and upper index 
      lonli = np.argmin(np.abs(lons - lonbounds[0])) 
      lonui = np.argmin(np.abs(lons - lonbounds[1])) 

      precip_subset = f.variables['precipitation'][ : , lonli:lonui , latli:latui ] 
      precip_subsetland2010.append(precip_subset) 
      precipsubsetland2010 = np.asarray(precip_subsetland2010) 
      print(precipsubsetland2010.shape) 

不過,我得到的輸出如下所示:

OUTPUT:

(1, 31, 180, 140) 
(2,) 
(3,) 
(4,) 
(5,) 
(6,) 
(7,) 
(8,) 
(9,) 
(10,) 
(11,) 
(12,) 

我最終希望將數據添加到列表中,然後轉換爲形狀爲(365, 180, 140)的數組。我怎樣才能做到這一點?這是append的正確應用嗎?

+0

你們需要更多的信息來解答嗎? –

+0

'precip_subset'有你提到的形狀嗎?打印出它的形狀。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅ:我在開頭打印的形狀列表是12個文件的「沉澱物集」的形狀。 –

回答

1

在循環中,只是追加precip_subset到您的列表:

precip_subsetland2010.append(precip_subset) 

環路之外,請致電np.vstack,以垂直堆疊您的數據。

output = np.vstack(precip_subsetland2010) 

印刷output.shape應該給你類似(X, 180, 140)X是構成陣列的所有行的總和)。

+0

非常感謝。 –