2017-02-26 49 views
0

我有2 Numpy阵列<type 'numpy.ndarray'>形状为(10,) (10, 6),我想连接第一个与第二个。下面提供的numpy的阵列,如何有效连接2 Numpy数组?

r1 
['467c8100-7f13-4244-81ee-5e2a0f8218a8', 
'71a4b5b2-80d6-4c12-912f-fc71be8d923e', 
'7a3e0168-e47d-4203-98f2-a54a46c62ae0', 
'7dfd43e7-ced1-435f-a0f9-80cfd00ae246', 
'85dbc70e-c773-43ee-b434-8f458d295d10', 
'a56b2bc3-4a81-469e-bc5f-b3aaa520db05', 
'a9e8996f-ff35-4bfb-bbd9-ede5ffecd4d8', 
'c3037410-0c2e-40f8-a844-ac0664a05783', 
'c5618563-10c0-425b-a11b-2fcf931f0ff7', 
'f65e6cea-892e-4335-8e86-bf7f083b5f53'] 

r2 
[[1.55000000e+02, 5.74151515e-01, 1.55000000e+02, 5.74151515e-01, 3.49000000e+02, 1.88383585e+00], 
[5.00000000e+00, 1.91871554e-01, 1.03000000e+02, 1.22893828e+00, 2.95000000e+02, 3.21148368e+00], 
[7.10000000e+01, 1.15231270e-01, 2.42000000e+02, 5.78527276e-01, 4.09000000e+02, 2.67915246e+00], 
[3.60000000e+01, 7.10066720e-01, 2.42000000e+02, 1.80213634e+00, 4.12000000e+02, 4.16314391e+00], 
[1.15000000e+02, 1.05120284e+00, 1.30000000e+02, 1.71697773e+00, 2.53000000e+02, 2.73640301e+00], 
[4.70000000e+01, 2.19434656e-01, 3.23000000e+02, 4.84093786e+00, 5.75000000e+02, 7.00530186e+00], 
[5.50000000e+01, 1.22614463e+00, 1.04000000e+02, 1.55392099e+00, 4.34000000e+02, 4.13661261e+00], 
[3.90000000e+01, 3.34816889e-02, 1.10000000e+02, 2.54431753e-01, 2.76000000e+02, 1.52322736e+00], 
[3.43000000e+02, 2.93550948e+00, 5.84000000e+02, 5.27968165e+00, 7.45000000e+02, 7.57657633e+00], 
[1.66000000e+02, 1.01436635e+00, 2.63000000e+02, 2.69197514e+00, 8.13000000e+02, 7.96477735e+00]] 

我试图与命令np.concatenate((r1, r2))来连接,它与ValueError: all the input arrays must have same number of dimensions我不理解该消息返回。因为,r1可能与r2连接,并且可以形成一个全新的阵列并产生一个新的阵列10 x 7

如何解决这个问题?

+2

结果数组应该如何显示? – falsetru

+0

'10×7'尺寸和'r1'的每个元素在numpy数组中有前排,LIKE: '['467c8100-7f13-4244-81ee-5e2a0f8218a8',1.55000000e + 02 5.74151515e-01 1.55000000 e + 02 5.74151515e-01 3.49000000e + 02 1.88383585e + 00]' – Arefe

+1

快速的问题 - 你要*保留*连接列的结果,在循环?如果是这样,你应该尝试重组你的程序,所以你不需要那样做。这是NumPy数组可能工作效率最低的方法之一,因为您需要每次都复制所有数据。 – user2357112

回答

1

可以reshaper1使其二维和指定axis沿该阵列应该加入:

import numpy as np 

r1 = np.ones((10,)) 
r2 = np.zeros((10, 6)) 
np.concatenate((r1.reshape(10, 1), r2), axis=1) 
3

numpy的提供了一个简单的方法来沿着第二轴串联。

np.c_[r2,r1] 
+0

另一个很好的答案。就我而言,这将是'np.c_ [r1,r2]' – Arefe

1

这2阵列具有D型和形状失配:

In [174]: r1.shape 
Out[174]: (10,) 
In [175]: r1.dtype 
Out[175]: dtype('<U36') 

In [177]: r2.shape 
Out[177]: (10, 6) 
In [178]: r2.dtype 
Out[178]: dtype('float64') 

如果添加维度r1,所以它是现在(10,1),则可以在轴= 1串联。但需要注意的D型 - 彩车已变成字符串:

In [181]: r12 =np.concatenate((r1[:,None], r2), axis=1) 
In [182]: r12.shape 
Out[182]: (10, 7) 
In [183]: r12.dtype 
Out[183]: dtype('<U36') 
In [184]: r12[0,:] 
Out[184]: 
array(['467c8100-7f13-4244-81ee-5e2a0f8218a8', '155.0', '0.574151515', 
     '155.0', '0.574151515', '349.0', '1.88383585'], 
     dtype='<U36') 

混合字符串的一种方法,浮动是结构化的阵列,例如:

In [185]: res=np.zeros((10,),dtype='U36,(6)f') 
In [186]: res.dtype 
Out[186]: dtype([('f0', '<U36'), ('f1', '<f4', (6,))]) 
In [187]: res['f0']=r1 
In [188]: res['f1']=r2 
In [192]: res.shape 
Out[192]: (10,) 
In [193]: res[0] 
Out[193]: ('467c8100-7f13-4244-81ee-5e2a0f8218a8', [ 155.  , 0.57415152, 155.  , 0.57415152, 349.  , 1.88383579]) 

我们也可以做一个(10, 7)数组与dtype = object。但是大多数数组操作都不适用于这样的字符串和浮点组合。而那些工作速度较慢。

为什么要连接这些数组?你打算如何处理结果? dtype不匹配比形状不匹配更严重。