Python numpy数组类型设置的奇怪行为

Python numpy数组类型设置的奇怪行为,python,numpy,Python,Numpy,代码 np.array([100,200,300],dtype=str) 返回: array(['1', '2', '3'], dtype='|S1') 报告说: 数据类型:数据类型,可选 阵列所需的数据类型。如果未给出,则将确定类型 作为保存对象所需的最小类型 顺序 这是一个bug吗?我仍然找不到这个问题,但为了避开它: >>> a=[100,200,300] >>> np.char.mod('%d', a) array(['100',

代码

np.array([100,200,300],dtype=str)
返回:

array(['1', '2', '3'], 
      dtype='|S1')
报告说:

数据类型:数据类型,可选

阵列所需的数据类型。如果未给出,则将确定类型 作为保存对象所需的最小类型 顺序


这是一个bug吗?

我仍然找不到这个问题,但为了避开它:

>>> 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')
值得注意的是,这比选择
dtype=“S…”
慢大约4倍,但比使用
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')

可以找到其他信息。

您看到此行为的原因是您必须指定每个字符串元素的大小,例如使用:

>>> np.array([100,200,300],dtype='S3')
      array(['100', '200', '300'], 
             dtype='|S3')
否则,每个元素字符串的大小将默认为1

更多信息请点击此处:

你能试着使用
dtype=''S3'
看看这是否能满足你的期望吗?最近有人问过这个问题,尽管我现在找不到。详细搜索
numpy
标记应该可以找到它。@SethMMorton使用
“|S3”
工作如果你有
np.array([101201301],dtype=str)
会发生什么?@SethMMorton仍然返回“error”结果。问题是要对任意数字列表执行此操作,我需要首先检查所有数字的长度。谢谢!你能为这个函数添加一个指向文档的链接吗?我还更新了一些额外的示例,这取决于你所做的
%d
可能不适合你。