2015-09-17 87 views
3

我有幾個numpy的陣列,我想讀的他們,將它們連接起來一起:負載並連接numpy的陣列

對於加載的文件,我做了以下內容:

import numpy as np 
AVERAGE_files = glob.glob('*AVERAGE*') 
for AV in AVERAGE_files: 
    x = np.load(AV) 

現在的級聯我知道我必須使用np.concatenate函數,但我不知道如何開始拼接。我需要在循環之外聲明np.zeros數組嗎?

+0

FYI,通常numpy的導入爲NP,不爲num –

+0

什麼這些陣列的形狀? – hpaulj

+0

@hpaulj的形狀是(1,) – CatarinaCM

回答

3

當然就是這樣嗎?

import numpy as np 

new = np.array([]) 

for AV in AVERAGE_files: 
    x = np.load(AV) # I assume num in your example is an alias for numpy? 
    new = np.concatenate([new,x]) 
+1

只是一點點更正:new = np.concatenate([new,x])謝謝。我是新的python腳本 – CatarinaCM

+0

你是正確的,相應編輯。祝你好運。 – areuexperienced

+0

這隻適用於'x'只是1d。 – hpaulj

2

如果你已經有了加載x1, x2, x3單獨的陣列,可以使用

x = numpy.vstack((x1, x2, x3)) 

但它可能是更有效地使用像@ areuexperienced的拼接技術,因爲你不保持個人x1秒。

+0

在過去的時間裏,整個列表中的一個連接速度更快。增量方法不會節省內存。 – hpaulj

1

Numpy數組不能附加到,只能複製。因此np.concatenate導致新的陣列除了額外的值之外與舊的陣列相同。通過連續的連接構造一個數組,雖然當然可行,但這不是一種有效的方法。

如果文件的大小是已知的,你幾乎肯定是更好分配與np.zeros了循環數組,你建議:

import numpy as np 
array = np.zeros([size]) 
for i in range(0,len(AVERAGE_files)): 
    with open(AVERAGE_files[i]) as f: #assuming AV are strings? 
     array[i] = map(float,f)  

另外,您可以建立一個列表(可追加到有效),然後在最後轉換爲數組:

import numpy as np 
array = np.asarray([map(float,open(AV)) for AV in AVERAGE_files])