代码怪异的行为设置
np.array([100,200,300],dtype=str)
回报:
array(['1', '2', '3'],
dtype='|S1')
D类:数据类型,可选
的阵列所需的数据类型。如果没有给出,则该类型将被确定为 ,作为保持该序列中的对象所需的最小类型。
这是一个错误?
代码怪异的行为设置
np.array([100,200,300],dtype=str)
回报:
array(['1', '2', '3'],
dtype='|S1')
D类:数据类型,可选
的阵列所需的数据类型。如果没有给出,则该类型将被确定为 ,作为保持该序列中的对象所需的最小类型。
这是一个错误?
我仍然无法找到的问题,但要解决它:
>>> a=[100,200,300]
>>> np.char.mod('%d', a)
array(['100', '200', '300'],
dtype='|S3')
这就避免你的问题:
>>> a=[100,200,3005]
>>> np.char.mod('%d', a)
array(['100', '200', '3005'],
dtype='|S4')
的晦涩documentation,应该指出的是,这是约4倍然后选择dtype="S.."
较慢,但使用np.array(map(str,a))
方法的速度非线性更快。
你也可以做一些巧妙的事情:
>>> a
[1234.5, 123.4, 12345]
>>> np.char.mod('%s',a)
array(['1234.5', '123.4', '12345.0'],
dtype='|S7')
>>> np.char.mod('%f',a)
array(['1234.500000', '123.400000', '12345.000000'],
dtype='|S12')
>>> np.char.mod('%d',a) #Note the truncation of decimals here.
array(['1234', '123', '12345'],
dtype='|S5')
>>> np.char.mod('%s.stuff',a)
array(['1234.5.stuff', '123.4.stuff', '12345.0.stuff'],
dtype='|S13')
更多信息,可以发现here。
您看到此行为的原因是您必须指定每个字符串元素的大小,例如使用:
>>> np.array([100,200,300],dtype='S3')
array(['100', '200', '300'],
dtype='|S3')
否则每个元素串的大小将默认为1
问题是,要做到这一点的任意数字列表,我需要首先检查所有数字的长度。 – Bitwise
你能尝试使用'D型='| S3'',看看是否有给出你的期望? – SethMMorton
最近有人问这个问题,尽管我找不到它。对'numpy'标签的详细搜索应该会引导您。 – Daniel
@SethMMorton使用''| S3''工作 – bheklilr