gpt4 book ai didi

python - Numpy float 促销不一致

转载 作者:行者123 更新时间:2023-12-03 23:39:33 24 4
gpt4 key购买 nike

据我了解,在 x = f() * g() , 第一 f()执行,然后 g() ,然后结果相乘,然后才分配给 x .然而,下面似乎与此相矛盾:

import numpy as np

print(np.sqrt(2).dtype)
print((np.array([1.], dtype='float32') * np.array([.5], dtype='float64')).dtype)
print((np.array([1.], dtype='float32') * np.sqrt(2)).dtype)
>>> float64
>>> float64
>>> float32
在我之前的所有经验中,Numpy 晋升为更大的 dtype ,但不是在这里。如果我们分配单个数组并在之后相乘,则行为相同。我想 Numpy 除了 dtype 之外还使用了一些隐藏的属性而不是否决 Python 执行。
它是如何工作的?

最佳答案

在第 2 行:

print((np.array([1.], dtype='float32') * np.array([.5], dtype='float64')).dtype)
您将两个数组相乘,因此它提升了 dtype(如您所料)。但是,在第三行:
print((np.array([1.], dtype='float32') * np.sqrt(2)).dtype)
您将一个标量乘以一个数组,它保留了数组 dtype。请注意,如果您用这样的数组替换标量:
print((np.array([1.], dtype='float32') * np.sqrt([2])).dtype)
您将获得 float64正如你所期望的那样。

关于python - Numpy float 促销不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66538595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com