我是NumPy和SciPy的新手。 与Matlab不同,似乎NumPy中的每个数组都有一个数据类型。
假设我们有一个整数数组x
:
import numpy as np
x = np.array([1, 2, 3])
如果我想将数组转换为float,那么看起来如下工作:
y1 = x.astype('float64') # Works!
y2 = x.astype('float_') # Works!
y3 = x.astype('float') # Works!
但是我有点不好意思看到以下内容在没有单引号的情况下也能正常工作。
y4 = x.astype(float) # Still works!!
但是对于用于y1和y2的其他表达式,如果我省略单引号,则它不起作用:
y5 = x.astype(float64) # Doesn't work.
y6 = x.astype(float_) # Doesn't work.
所以,我对y4的工作原理感到有些困惑,但是y5和y6会导致错误。有人可以启发我吗?
答案 0 :(得分:6)
其他表达式有效,您只需要从numpy导入类型。您不需要为float
执行此操作,因为它是Python的内置类型。
y5 = x.astype(np.float64)
y6 = x.astype(np.float_)
字符串类型和类型类型输入都在内部转换为numpy.dtype
对象,这是您在使用ndarray.dtype
属性时看到的内容。
答案 1 :(得分:3)
这两项工作不起作用,因为在您的工作区中没有包含这些名称的变量:
y5 = x.astype(float64) # Doesn't work.
y6 = x.astype(float_) # Doesn't work.
我得到NameError: name 'float64' is not defined
。在将任何内容传递给x.astype
方法之前,Python解释器会产生错误。
如果您只是在交互式解释器中键入float64
,则会收到相同的错误。
np.float64
确实有效,因为np
命名空间中存在这样的变量。它实际上是一个numpy类。
float
也有效。它也是一个类,一个基类Python(它也可以用作函数,将字符串或数字转换为浮点对象)。
' float64'是一个astype
可以理解的字符串,可能是通过查找表中的内容。 (我可以看一下)。
另一方面,如果我给astype
一些随机字符串,我会得到一个不同的错误
In [967]: A.astype('bar')
...
TypeError: data type "bar" not understood
np.dtype('bar')
给出了同样的错误。
np.dtype(float)
np.dtype('float64')
np.dtype('float')
都返回相同的dtype('float64')
对象。
答案 2 :(得分:1)
阅读astype
的文档:
dtype : str or dtype
Typecode or data-type to which the array is cast.
如果您在没有引号的情况下使用float
,那么您正在使用dtype。
当您使用"float"
时,您就会使用str。
float64
和float_
不是python中的dtypes。