2017-06-02 59 views
0

所以,我有兩個數組numpy的 - 堆疊兩個數組不同類型

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

,我需要結合起來,使得我得到

array([1,'a'],[2,'b'],[3,'c']) 

我想到了一個簡單的

np.stack((a,b),axis=1) 

會做到這一點,但它會把所有東西都變成一個字符串。我如何避免這種情況?

array([['1', 'a'], 
     ['2', 'b'], 
     ['3', 'c']], 
     dtype='<U21') 
+0

你不能所有'numpy'數組的元素必須是相同的類型。 – Akavall

回答

1

你可以把它們放在一個結構數組

In [104]: a=np.array([1,2,3]) 
    ...: b=np.array(['a','b','c']) 

In [105]: arr = np.empty(a.shape[0], dtype='int,U4') 
In [106]: arr 
Out[106]: 
array([(0, ''), (0, ''), (0, '')], 
     dtype=[('f0', '<i4'), ('f1', '<U4')]) 
In [107]: arr['f0']=a 
In [108]: arr['f1']=b 
In [109]: arr 
Out[109]: 
array([(1, 'a'), (2, 'b'), (3, 'c')], 
     dtype=[('f0', '<i4'), ('f1', '<U4')]) 
In [111]: arr['f1'] 
Out[111]: 
array(['a', 'b', 'c'], 
     dtype='<U4') 

https://docs.scipy.org/doc/numpy/user/basics.rec.html

如果這是沒有用的,有獨立的陣列堅持。

1

你不能避免它,因爲它們需要是相同的類型。然而,你可以做這樣的事情:

import numpy as np 

a = np.array([1,2,3]) 
b = np.array(['a','b','c']) 
x = np.stack((a,b),axis=1) 

x[0][0].astype(np.int) 
>> 1 

x[0][1] 
>> 'a' 

但它不是最好的代碼。