【发布时间】:2016-12-17 07:42:01
【问题描述】:
有没有办法指定与 np.array(1.) 等构造一起使用的默认 dtype?
我特别希望np.array(1.) 成为np.float32 和np.array(1) 成为np.int32。相反,我得到np.float64 和np.int64
【问题讨论】:
有没有办法指定与 np.array(1.) 等构造一起使用的默认 dtype?
我特别希望np.array(1.) 成为np.float32 和np.array(1) 成为np.int32。相反,我得到np.float64 和np.int64
【问题讨论】:
默认值取决于您的系统。在 64 位系统上,默认类型为 64 位。在 32 位系统上,默认类型为 32 位。没有办法改变使用不同系统 C 头重新编译 numpy 的默认值。
您当然可以明确指定 dtypes,例如
>>> 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 标量:
>>> 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))
但是,对于复杂的类型,例如字符(字符串)或对象,这将失败。
【讨论】: