2017-05-13 220 views
1

我有三個numpy陣列形狀(250L,)c,Ierror。我希望能夠將三個數組保存到一個文本文件中,以便每個數組都是文件中的一列。到目前爲止,我已經試過如下:將三個一維數組組合成二維數組?

IndexError: axis 1 out of bounds [0, 1)

我如何結合這三個數組做一個形狀(250,3)陣列:

DataArray = np.concatenate((c,I,Error),axis=1) 
np.savetxt('VaryingC.txt',DataArray) 

這從最初的數組是一維返回一個錯誤?

+0

是你後:'np.column_stack((C,I,錯誤))'? – MaxU

回答

2

concatenate加入現有的軸,stack插入新的:

DataArray = np.stack((c,I,Error),axis=1) 
1

好像你正在尋找:

DataArray = np.column_stack((c,I,Error)) 

時間:

In [201]: a1 = np.random.randint(10**6, size=10**6) 

In [202]: a2 = np.random.randint(10**6, size=10**6) 

In [203]: a3 = np.random.randint(10**6, size=10**6) 

In [204]: %timeit np.column_stack((a1,a2,a3)) 
100 loops, best of 3: 14.1 ms per loop 

In [205]: %timeit np.stack((a1,a2,a3),axis=1) 
100 loops, best of 3: 14.2 ms per loop 

In [206]: %timeit np.transpose([a1,a2,a3]) 
100 loops, best of 3: 10.7 ms per loop 
1

在你的情況可以創建一個新的rray然後調換它:

np.transpose([c, I, Error]) 

np.transpose會自動創建一個新的數組,這樣你就不需要自己創建一個。

例如:

>>> import numpy as np 

>>> a = np.array([1, 1, 1, 1, 1]) 
>>> b = np.array([2, 2, 2, 2, 2]) 
>>> c = np.array([3, 3, 3, 3, 3]) 

>>> DataArray = np.transpose([a, b, c]) 
>>> DataArray 
array([[1, 2, 3], 
     [1, 2, 3], 
     [1, 2, 3], 
     [1, 2, 3], 
     [1, 2, 3]]) 

>>> DataArray.shape 
(5, 3) 
+1

你的解決方案似乎是提供的最快速的:) – MaxU

+1

@MaxU感謝您的時間安排!這是最快的並不讓我感到意外:畢竟'轉置'是最不常用的解決方案。值得注意的是,使用'transpose'時,結果是F-contiguous,而'stack'和'column_stack'返回C-contiguous數組。 – MSeifert

相關問題