python - Numpy float 促销不一致

标签 python arrays numpy casting

据我了解,在 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/

相关文章:

python - 使用 Pandas 选择满足特定条件的组中的所有元素

python - 我需要直接打印匹配字符串之后的内容

java - arrayList 存储的不确定性

python - 如何将新列添加到按 groupby 分组的分层数据框中

python - 我的 numpy (python) 旋转矩阵不工作

python - numpy FileNotFoundError : [Errno 2] No such file or directory

Python - 播放带音频的视频(使用 OpenCV?)

c - 列出整数并放入数组中

java - 避免没有集合的重复?

python - flask WTForms : Difference between DataRequired and InputRequired