2017-02-13 48 views
1

我試圖把許多numpy的文件來得到一個大numpy的文件,我試圖按照這兩個環節Append multiple numpy files to one big numpy file in pythonPython append multiple files in given order to one big file這是我做過什麼:如何許多numpy的文件追加到蟒蛇一個numpy的文件

​​

的結果的一個例子,我有:

/home/user/Desktop/Trace=96 
[[ 0.01518007 0.01499514 0.01479736 ..., -0.00392216 -0.0039761 
    -0.00402747]] 
[[-0.00824758 -0.0081808 -0.00811402 ..., -0.0077236 -0.00765425 
    -0.00762086]] 
/home/user/Desktop/Trace=97 
[[ 0.00614908 0.00581004 0.00549154 ..., -0.00814741 -0.00813457 
    -0.00809347]] 
[[-0.00824758 -0.0081808 -0.00811402 ..., -0.0077236 -0.00765425 
    -0.00762086]] 
/home/user/Desktop/Trace=98 
[[-0.00291786 -0.00309509 -0.00329287 ..., -0.00809861 -0.00797789 
    -0.00784175]] 
[[-0.00824758 -0.0081808 -0.00811402 ..., -0.0077236 -0.00765425 
    -0.00762086]] 
/home/user/Desktop/Trace=99 
[[-0.00379887 -0.00410453 -0.00438963 ..., -0.03497837 -0.0353842 
    -0.03575151]] 
[[-0.00824758 -0.0081808 -0.00811402 ..., -0.0077236 -0.00765425 
    -0.00762086] 

這個線表示第一跡線:

[[-0.00824758 -0.0081808 -0.00811402 ..., -0.0077236 -0.00765425 
     -0.00762086]] 

它一直重複着。

我問的第二個問題,前兩天,一開始我覺得我有最好的答案,但嘗試建模打印和大量的最後文件後,「OutFileTraces.npy」我發現我的代碼:

1 /不從文件夾'test'打印numpy文件並遵守它們的順序(trace0,trace1,trace2,...)

2 /只保存文件中的最後一條曲線,或繪製OutFileTraces.npy,我發現只有一個痕跡,它是第一個。

所以我需要糾正我的代碼,因爲我真的被封鎖了。如果你能幫助我,我將非常感激。

在此先感謝。

+0

@http的陣列列表的一個簡單的例子://stackoverflow.com/users/ 6626530 /四條,這是我的代碼。 – nass9801

+0

在你的第一次引用鏈接一個鏈接,我讀探索與文件多'save',http://stackoverflow.com/a/35752728/901925 – hpaulj

+0

@hpaulj,其實我能夠通過閱讀我的所有數據我的代碼,問題只是在文件中保存時,它保存只有第一個文件,這是我更新的代碼:http://stackoverflow.com/questions/42204368/how-to-append-many-numpy-files- python – nass9801

回答

0

正如

loading arrays saved using numpy.save in append mode

討論,可以多次保存到一個打開的文件,並且可以加載多次。這沒有記錄,可能不是首選,但它的作品。 savez存檔是保存多個陣列的首選方法。

這裏的玩具例子:

In [777]: with open('multisave.npy','wb') as f: 
    ...:  arr = np.arange(10) 
    ...:  np.save(f, arr) 
    ...:  arr = np.arange(20) 
    ...:  np.save(f, arr) 
    ...:  arr = np.ones((3,4)) 
    ...:  np.save(f, arr) 
    ...:  
In [778]: ll multisave.npy 
-rw-rw-r-- 1 paul 456 Feb 13 08:38 multisave.npy 
In [779]: with open('multisave.npy','rb') as f: 
    ...:  arr = np.load(f) 
    ...:  print(arr) 
    ...:  print(np.load(f)) 
    ...:  print(np.load(f)) 
    ...:  
[0 1 2 3 4 5 6 7 8 9] 
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] 
[[ 1. 1. 1. 1.] 
[ 1. 1. 1. 1.] 
[ 1. 1. 1. 1.]] 

這裏是保存相同的形狀

In [780]: traces = [np.arange(10),np.arange(10,20),np.arange(100,110)] 
In [781]: traces 
Out[781]: 
[array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19]), 
array([100, 101, 102, 103, 104, 105, 106, 107, 108, 109])] 
In [782]: arr = np.array(traces) 
In [783]: arr 
Out[783]: 
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
     [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 
     [100, 101, 102, 103, 104, 105, 106, 107, 108, 109]]) 

In [785]: np.save('mult1.npy', arr) 

In [786]: data = np.load('mult1.npy') 
In [787]: data 
Out[787]: 
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
     [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], 
     [100, 101, 102, 103, 104, 105, 106, 107, 108, 109]]) 
In [788]: list(data) 
Out[788]: 
[array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19]), 
array([100, 101, 102, 103, 104, 105, 106, 107, 108, 109])] 
+0

非常感謝您的回答,但我有一百萬的痕跡,而這種解決方案並不實際,您是否同意我的觀點? – nass9801

+0

爲什麼不呢?我可以用一些循環來寫這個例子,從文件或數組列表中保存,並加載到列表中。作爲一個側面問題 - 這些「痕跡」都是相同的大小?如果是這樣,他們可以連接成一個大型數組,允許您只用一個電話就可以保存/加載。 – hpaulj

+0

@hpauli,它們全部具有相同的尺寸,其是大約32,1 KB – nass9801

1
  1. Glob生成無序列表。您需要使用額外的行進行顯式排序,因爲排序過程就地完成並且不會返回列表。

    npfiles = glob.glob("*.npy") 
    npfiles.sort() 
    for npfile in npfiles: 
        ... 
    
  2. NumPy文件包含單個數組。如果你想在單個文件中存儲幾個陣列,你可以看看.npz文件np.savezhttps://docs.scipy.org/doc/numpy/reference/generated/numpy.savez.html#numpy.savez我還沒有看到這個在廣泛使用,所以你可能希望認真考慮替代品。

    1. 如果你的數組的形狀和存儲都是相同的數據,你可以製作一個更大的數組。假設當前形狀爲(N_1, N_2),並且您有N_0這樣的數組。與

      all_arrays = [] 
      for npfile in npfiles: 
          all_arrays.append(np.load(os.path.join(npyfilespath, npfile))) 
      all_arrays = np.array(all_arrays) 
      np.save(f_handle, all_array) 
      

      環路將產生一個文件,形狀(N_0, N_1, N_2)

    2. 的單個陣列如果您需要每名訪問數組,HDF5文件是一個很好的匹配。見http://www.h5py.org/(全介紹太多的SO回答,請參閱快速入門指南http://docs.h5py.org/en/latest/quick.html