numpy - 堆叠两个不同类型的数组

时间:2017-06-02 01:24:36

标签: python 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')

2 个答案:

答案 0 :(得分: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'

但这不是最好的代码。

答案 1 :(得分: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

如果没用,请坚持使用单独的数组。