2011-04-19 330 views
13

是否有任何设置numpy以全局使用float32值而不是float64值得干净的方法?Python:使numpy默认为float32

+2

密切相关:http://stackoverflow.com/questions/5350342/can-i-set-float128-as-the-standard-float-array-in-numpy/5351486 – 2011-04-19 20:33:18

+3

关于scipy list的一个有趣的讨论: http://old.nabble.com/switching-to-float32-ts24203533.html#a24203533 – joris 2011-04-19 20:41:16

+0

看到了那个讨厌的谈话,却错过了float128(谢谢sven),看起来他们都在说同样的话:'不,不是真的'。在Nabble的讨论中,当时提到将其添加到食谱,这将是很好的。我自己只是做了一些类似于提到的float128问题(并回答)。可惜 – Bolster 2011-04-20 00:03:18

回答

7

不是我所知道的。你需要在调用任何数组的构造函数时明确指定dtype,或者在将数组传递给GPU代码之前将其转换为float32(使用ndarray.astype方法)(我认为这是问题的关键? )。如果你真的担心GPU的情况,那么我更喜欢后者 - 如果没有对numpy广播规则和非常仔细设计的代码的全面了解,尝试将所有内容保存为单精度会变得非常烦人。

另一种选择可能是创建自己的方法,它重载标准numpy构造函数(如numpy.zeros,numpy.ones,numpy.empty)。这应该非常接近于将所有内容都保存在float32中。

+0

这就是我为GPU做的事情,但我担心的是直接比较测试中CPU绑定等效计算精度,作为“奇怪的bug追捕”的一部分 – Bolster 2011-04-20 12:03:18

+0

这个评论对于广播规则是否仍然有效?如果使用'dtype''float32'声明数组,那么在隐式转换或广播中是否存在任何风险? – Chiel 2017-10-10 15:50:39