2017-06-02 3 views
0

SO habe ich zwei Arraysnumpy - stapeln zwei Arrays mit unterschiedlichen Typen

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

Dass ich so zu kombinieren, damit ich

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

Ich dachte, bekommen eine einfache

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

würde es tun, aber es verwandelt alles in eine Schnur. Wie vermeide ich das?

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

Sie können nicht alle Elemente von 'numpy' Array vom selben Typ sein. – Akavall

Antwort

1

Sie können sie in einem strukturierten Array

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

Wenn das nicht sinnvoll ist, bleiben separate Arrays setzen.

1

Sie können nicht vermeiden, da sie vom gleichen Typ sein müssen. Sie können jedoch so etwas tun:

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' 

Aber es ist nicht der schönste Code.

Verwandte Themen