2017-09-15 106 views
0

我有一個非常簡單的問題! 我如何合併兩個numpy的陣列增加尺寸:合併兩個Numpy Array

假設我有以下陣列:

a=[1,2] 
b=[3,4,5] 

我需要這樣的結果:

c=[[1,2],[3,4,5] 

然而

np.concatenate((a,b),axis=0) 

不起作用!

謝謝!

+0

你什麼錯誤? – Sam51

+0

你爲什麼要這樣做?這個數組不會有很多'numpy.array'屬性。 – Akavall

+0

不要錯誤。我的結果是[1,2,3,4,5] – Elham

回答

1

您只需執行以下操作即可獲得您想要的結果。

c = [a,b] 

或者

c = np.array([a,b]) 

結果:

[[1, 2], [3, 4, 5]] 
+0

您能否顯示'c'的'repr' - 查看類型和dtype? – hpaulj

1

把它們放在一起在一個列表:

In [269]: c = [a,b] 
In [270]: c 
Out[270]: [[1, 2], [3, 4, 5]] 

使從一個數組不起作用v ERY很好:

In [271]: np.array(c) 
Out[271]: array([list([1, 2]), list([3, 4, 5])], dtype=object) 

但如果你的目標只是寫的名單文件,CSV風格,我們可以這樣做:

In [272]: for row in c: 
    ...:  line='' 
    ...:  for x in row: 
    ...:   line += '%5s'%x 
    ...:  print(line) 
    ...:  
    1 2 
    3 4 5 

對於文件剛剛替補爲print文件寫入。

numpy有一個不錯的savetxt,但它需要一個很好的二維數組。那個衣衫襤褸的1d對象dtype數組不起作用。

itertools.zip_longest也可用於'填充'c的元素。但簡單地寫入文件是最簡單的。使用zip_longest填充行,然後使用savetxt來編寫csv。請注意,「空白」分隔「細胞」:

In [321]: rows =list(zip(*zip_longest(*c,fillvalue=''))) 
In [322]: rows 
Out[322]: [(1, 2, ''), (3, 4, 5)] 
In [323]: np.savetxt('foo.txt',rows, fmt='%5s',delimiter=',') 
In [324]: cat foo.txt 
    1, 2,  
    3, 4, 5 

與適當的襯墊,我可以重新加載CSV(可能需要填充值撥弄):

In [328]: np.genfromtxt('foo.txt',delimiter=',') 
Out[328]: 
array([[ 1., 2., nan], 
     [ 3., 4., 5.]])