2017-08-08 47 views
2

我到目前为止还没有遇到任何问题,所以这是纯粹出于好奇的问题。我也应该使用numpy.float64而不是Python float当使用numpy.array

在Python我通常限定的浮纱和浮阵列是这样的:

import numpy as np 

s = 1.0 
v = np.array([1.0, 2.0, 3.0]) 

在上述s的情况下是float,但v元素是numpy.float64类型。

更一致的,我可以,例如,而是执行此操作:

import numpy as np 

s = np.float64(1.0) 
v = np.array([1.0, 2.0, 3.0]) 

是否存在的情况下,从一个角度准确度/精确的点,其中建议使用“一致”的做法?我认为在“不一致”的方法中会出现什么样的错误?

+0

如果我想要一个特殊的dtype标量,我会使用's = np.array(1.0,dtype = ...)'。 – hpaulj

回答

2

的Python(至少CPython)使用双打为它的float型内部 - 和双打64位浮点数(也许不是永远,但我还没有找到一个平台+编译器在哪里双打不是64位浮点数)。

因此,不管您将它们保留为floatnp.float64,您都不应该期待任何问题。

但是如果使用蟒float和NumPys np.float32你可以期望的差异作为float具有比np.float32(32位)多精度(64位)。

+1

C双打有8个字节的假设仍然硬连线到CPython源代码中的不同位置,所以如果CPython曾经遇到过一个双倍不是64位的平台,它可能会非常糟糕。 (是的,我假设字节有8位,但如果CPython曾经遇到过一个字节没有8位的平台,它会更坏)。所以IOW,你认为双倍是64位浮点的假设是一个相当安全的。 :-) –

+0

下面是一个这样的地方的例子,其中假设8字节双打,在编组模块中:https://github.com/python/cpython/blob/v3.6.2/Python/marshal.c#L362- L369 –

+0

@MarkDickinson这很好。我只做了一个肤浅的搜索,当我发现作者希望[确保C++双打是64位]的问题时,我认为它们可能存在差异(https://stackoverflow.com/questions/752309/ensuring- C-双打-是-64位)。 – MSeifert

相关问题