Python 为np.array(1)指定默认数据类型

Python 为np.array(1)指定默认数据类型,python,numpy,Python,Numpy,有没有一种方法可以指定与诸如np.array(1.)之类的构造一起使用的默认数据类型 特别是我希望np.array(1.)成为np.float32和np.array(1)成为np.int32。相反,我得到的是np.float64和np.int64默认值取决于您的系统。在64位系统上,默认类型为64位。在32位系统上,默认类型为32位。除了用不同的SystemC头重新编译numpy之外,没有办法更改默认值 当然,您可以显式地指定数据类型,例如 >>> x = np.array(1

有没有一种方法可以指定与诸如
np.array(1.)之类的构造一起使用的默认数据类型


特别是我希望
np.array(1.)
成为
np.float32
np.array(1)
成为
np.int32
。相反,我得到的是
np.float64
np.int64

默认值取决于您的系统。在64位系统上,默认类型为64位。在32位系统上,默认类型为32位。除了用不同的SystemC头重新编译numpy之外,没有办法更改默认值

当然,您可以显式地指定数据类型,例如

>>> x = np.array(1, dtype='int32')

编辑:正如kazemakase在下面提到的,上述内容仅适用于int32/int64。在最新的numpy版本中,无论系统如何,浮点的默认值都是float64。

您可以使用
np.float32
np.int32
作为
np.ndarray
构造函数:

>>> np.float32([1.])
array([ 1.], dtype=float32)
>>> np.int32([1])
array([1], dtype=int32)
但如果给定标量输入(不是秩0数组),则返回numpy标量:

重新定义默认数据类型似乎不是那么容易,另请参见:

如果您不关心额外的开销,您可以始终使用字典作为“开关”,为您发现不合适的数据类型获取正确的数据类型:

defaults = {np.dtype('int64'): np.int32,
            np.dtype('float64'): np.float32}

before = 1.
np.array(before, dtype=defaults.get(np.result_type(before), None))

但是,对于字符(字符串)或对象等复杂类型,这将失败。

OK,看起来numpy还没有为GPU时代做好准备。现在的系统是64位的,但GPU的计算主要是在32位上完成的,所以我们最终会让人们通过将默认的numpy类型传播到GPU来做次优的事情
defaults = {np.dtype('int64'): np.int32,
            np.dtype('float64'): np.float32}

before = 1.
np.array(before, dtype=defaults.get(np.result_type(before), None))