Numpy transpose将条目转换为字符串?

时间:2017-11-19 18:39:25

标签: python arrays numpy

我有一个数组,其条目是int和字符串的混合。我想用numpy转置它,但是当我这样做时,它似乎变成了字符串。

In [47]: X

Out[47]: [['a', 1, 2], ['b', 1, 3]]

In [48]: np.transpose(X)

Out[48]:
array([['a', 'b'],
       ['1', '1'],
       ['2', '3']],
      dtype='<U1')

我真的很喜欢输出:

[['a','b'],[1,1],[2,3]]

(我可以通过编写更多的代码进入并修复它,但是我认为这很烦人而且不是很好的做法。虽然如果有一两行修复也会有帮助。我也想知道是什么numpy正在做这件事,以及如何让它以我想要的方式运作。)

编辑:

我注意到当我将X转换为numpy数组时会发生这种情况:

In [50]: X = np.array(X)

In [51]: X
Out[51]:
array([['a', '1', '2'],
       ['b', '1', '3']],
      dtype='<U1')

EDIT2:已解决:

In [55]: Y = np.asarray(X, dtype = object)

In [56]: Y
Out[56]:
array([['a', 1, 2],
       ['b', 1, 3]], dtype=object)
In [57]: Y.T
Out[57]:
array([['a', 'b'],
       [1, 1],
       [2, 3]], dtype=object)

2 个答案:

答案 0 :(得分:1)

问题似乎是当X转换为np.array时。如果要将X转换为具有混合类型的numpy数组,请使用dtype = object:Numpy dtype for list with mixed data types

In [55]: Y = np.asarray(X, dtype = object)

In [56]: Y
Out[56]:
array([['a', 1, 2],
       ['b', 1, 3]], dtype=object)
In [57]: Y.T
Out[57]:
array([['a', 'b'],
       [1, 1],
       [2, 3]], dtype=object)

答案 1 :(得分:1)

有时使用对象数组比使用结构化数组更不可取。如果您想要去那条路线,只需将列表列表转换为元组列表,然后按以下步骤操作:

a = [['a', 1, 2], ['b', 1, 3]]
a = [tuple(i) for i in a]
a
[('a', 1, 2), ('b', 1, 3)]

dt = [('A', '<U5'), ('B', '<i4'), ('C', '<i4')]
b = np.asarray(a, dtype=dt)
array([('a', 1, 2), ('b', 1, 3)], 
      dtype=[('A', '<U5'), ('B', '<i4'), ('C', '<i4')])

然后字段/列很有用

b['B']
array([1, 1])

b['B'].sum()
2