这很有趣,运行你的例子给了我这个:
>>> numpy.asarray([['abc', 117858348, 117858388, 'def']])
array([['abc', '117', '117', 'def']],
dtype='|S3')
我很想知道转换是如何工作的:
>>> help(numpy.asarray)
asarray(a, dtype=None, order=None)
Convert the input to an array.
Parameters
----------
a : array_like
Input data, in any form that can be converted to an array. This
includes lists, lists of tuples, tuples, tuples of tuples, tuples
of lists and ndarrays.
dtype : data-type, optional
By default, the data-type is inferred from the input data.
看起来底层类型是inferred from the input data
,我想知道这意味着什么,所以我做了
>>> import inspect
>>> print inspect.getsource(numpy.asarray)
我们得到return array(a, dtype, copy=False, order=order)
但是numpy.array
是内置的,所以通过http://docs.scipy.org/doc/numpy/reference/generated/numpy.array.html的文档我们得到:
dtype:数据类型,可选
数组所需的数据类型。如果没有给出,那么类型将被确定为在序列中保存对象所需的最小类型。此参数只能用于“向上转换”数组。对于向下转换,请使用 .astype(t) 方法。
好吧,它看起来尽可能向上转换,所以在我的情况下向上转换为长度为 3 的字符串,因为那是我在序列中拥有的最长字符串,如果我引入更长的字符串,它会向上转换,似乎在我的如果它没有正确考虑其他类型的数字长度,这可能是一个错误,我不知道......
你可以只指定一个长字符串序列
>>> numpy.asarray([['abc', 117858348, 117858388, 'defs']], dtype = 'S20')
array([['abc', '117858348', '117858388', 'defs']],
dtype='|S20')
20个字符似乎绰绰有余,虽然它可能会消耗更多的内存,所以你可以简单地将它设置为最大值......
据我所知numpy
,将值存储为同质类型,这就是为什么在创建数组时一切都必须是预先确定的类型。
>>> numpy.__version__
'1.6.1'
$ python --version
Python 2.6.1
$ uname -a
Darwin 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386
我希望这有帮助。