2017-02-26 47 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不匹配比形狀不匹配更嚴重。