2017-05-13 82 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

相关问题