为np.array指定默认dtype(1。)

时间:2016-04-14 22:39:49

标签: python numpy

有没有办法指定与np.array(1.)等结构一起使用的默认dtype?

我希望np.array(1.) np.float32np.array(1)np.int32。相反,我得到np.float64np.int64

2 个答案:

答案 0 :(得分:5)

默认值取决于您的系统。在64位系统上,默认类型为64位。在32位系统上,默认类型为32位。没有办法改变使用不同的系统C头重新编译numpy的默认短路。

您当然可以明确指定dtypes,例如

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

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

答案 1 :(得分:2)

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

>>> np.float32([1.])
array([ 1.], dtype=float32)
>>> np.int32([1])
array([1], dtype=int32)

但如果给出标量输入(不是排名0数组),则返回numpy-scalar:

>>> np.float32(1)
1.
>>> np.asarray(np.float32(1))  # Use np.asarray to convert it to an array
array(1.0, dtype=float32)

重新定义默认dtype似乎并不那么容易,另请参阅:

如果您不关心额外的开销,您可以随时使用字典作为“切换”来为您认为不合适的人获取正确的dtype:

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

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

然而,这会因字符(字符串)或对象等复杂类型而失败。