python numpy arange dtpye?为什么转换为整数为零

时间:2018-05-04 09:02:02

标签: python numpy

x = np.arange(0.3,12.5,0.6)

打印(x)的

[0.3 0.9 1.5 2.1 2.7 3.3 3.9 4.5 5.1 5.7 6.3 6.9 7.5 8.1 8.7 9.3 9.9 10.5 11.1 11.7 12.3]

x = np.arange(0.3,12.5,0.6,int)

打印(x)的

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

2 个答案:

答案 0 :(得分:3)

指定dtype = int时,它会将开始,停止和步骤转换为相同的内容。

因此,它变为int(start), int(stop), int(step)

因此,在你的情况下,当指定dtype = int时,start和step保持为0并且你得到一个满0的数组。

此问题已在此处进行了解释:

https://github.com/numpy/numpy/issues/2457

答案 1 :(得分:2)

首先让我们跳过浮动步骤的复杂性,并使用一个简单的整数开始和停止:

In [141]: np.arange(0,5)
Out[141]: array([0, 1, 2, 3, 4])
In [142]: np.arange(0,5, dtype=int)
Out[142]: array([0, 1, 2, 3, 4])
In [143]: np.arange(0,5, dtype=float)
Out[143]: array([0., 1., 2., 3., 4.])
In [144]: np.arange(0,5, dtype=complex)
Out[144]: array([0.+0.j, 1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j])
In [145]: np.arange(0,5, dtype='datetime64[D]')
Out[145]: 
array(['1970-01-01', '1970-01-02', '1970-01-03', '1970-01-04',
       '1970-01-05'], dtype='datetime64[D]')

即使bool工作,也在一定范围内:

In [149]: np.arange(0,1, dtype=bool)
Out[149]: array([False])
In [150]: np.arange(0,2, dtype=bool)
Out[150]: array([False,  True])
In [151]: np.arange(0,3, dtype=bool)
ValueError: no fill-function for data-type.
In [156]: np.arange(0,3).astype(bool)
Out[156]: array([False,  True,  True])

有两种可能的布尔值,因此要求更多应该会产生某种错误。

arange是编译代码,因此我们无法轻易检查其逻辑(但欢迎您在github上搜索C代码)。

这些示例表明,在某种意义上,它确实将参数转换为相应的dtype,并对其执行迭代。它不会简单地生成范围并在最后转换为dtype。