【发布时间】:2017-11-20 03:00:39
【问题描述】:
我有一个数组,它的条目是整数和字符串的混合。我想使用 numpy 转置它,但是当我这样做时,int 似乎变成了字符串。
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)
【问题讨论】:
-
尝试使用 dtype 作为对象
-
实际上混合字符串和整数的 numpy 数组并不是一个好习惯。切换到
objectdtype 有效,但失去了数组的大部分优点(例如快速数值计算)。 -
np.transpose(X)实际上是np.array(X).transpose()。大多数numpy函数一开始就确保它们的输入是数组。