【发布时间】:2020-01-18 18:56:21
【问题描述】:
对于从整数和32 bit float arrays 到64 bit float arrays 的自动 Numpy 类型转换,是否可以避免或发出警告?
我的用例是我正在开发一个大型分析包(20k 行 Python 和 Numpy),目前混合了 float 32 和 64 以及一些 int dtypes,很可能导致性能欠佳和浪费内存,基本上我想在任何地方都使用 float32。
我知道在 Tensorflow 中组合两个不同 dtype 的数组会产生错误 - 正是因为隐式转换为 float64 会导致性能不佳,并且在所有计算张量上都具有“传染性”,并且很难找到位置如果隐式完成,则会引入它。
寻找 Numpy 中的选项或猴子修补 Numpy 的方法,使其在这方面的行为类似于 Tensorflow,即在 np.add、np.mul 等操作上的隐式类型转换时发出错误,甚至更好的是,发出带有打印回溯的警告,以便继续执行,但我看到它发生在哪里。可能吗?
【问题讨论】:
-
ufunclikenp.add采用casting参数。看起来默认值是same_kind' https://docs.scipy.org/doc/numpy/reference/ufuncs.html#casting-rules, https://docs.scipy.org/doc/numpy/reference/generated/numpy.can_cast.html#numpy.can_cast. I think you wantcasting='no'`。 -
提供
out参数也可能会有所帮助。 -
但是在测试中,
np.multiply(x,2., casting='no')给了我一个错误,因为它无法将np.array(2.)(float64) 转换为 float32(以匹配x。所以这个转换参数可能需要做的更少使用生成的dtype,以及更多作为输入的内容。
标签: python numpy tensorflow floating-point