使用混合类型连接数组

时间:2016-09-28 18:04:26

标签: python numpy

考虑np.array a

a = np.concatenate(
    [np.arange(2).reshape(-1, 1),
     np.array([['a'], ['b']])],
    axis=1)
a

array([['0', 'a'],
       ['1', 'b']], 
      dtype='|S11')

如何执行此连接以使a的第一列保持整数?

2 个答案:

答案 0 :(得分:2)

您可以使用numpy.object作为dtype来混合numpy数组中的类型:

>>> import numpy as np
>>> a = np.empty((2, 0), dtype=np.object)
>>> a = np.append(a, np.arange(2).reshape(-1,1), axis=1)
>>> a = np.append(a, np.array([['a'],['b']]), axis=1)

>>> a
array([[0, 'a'],
       [1, 'b']], dtype=object)

>>> type(a[0,0])
<type 'int'>

>>> type(a[0,1])
<type 'str'>

答案 1 :(得分:2)

建议的重复建议制作重组或结构化数组。

Store different datatypes in one NumPy array?

在这种情况下:

In [324]: a = np.rec.fromarrays((np.arange(2).reshape(-1,1), np.array([['a'],['b']])))
In [325]: a
Out[325]: 
rec.array([[(0, 'a')],
 [(1, 'b')]], 
          dtype=[('f0', '<i4'), ('f1', '<U1')])
In [326]: a['f0']
Out[326]: 
array([[0],
       [1]])
In [327]: a['f1']
Out[327]: 
array([['a'],
       ['b']], 
      dtype='<U1')

(我已经重新开放了,因为我认为这两种方法都需要承认。另外object答案已经给出并被接受了。)