【发布时间】:2021-01-25 09:42:45
【问题描述】:
我正在尝试从双精度数组转换为单精度。为了优化空间,我尝试使用 out 参数,以便 numpy 不会分配额外的空间。然而,两个版本的调用结果似乎不同
import numpy as np
doubleArr = np.zeros((10000,10000), dtype=np.double)
doubleArr[0,0] = 1e-30
singleArr = np.single(doubleArr)
print ("%.40f"%singleArr[0,0])
singleArr = np.zeros((10000,10000), dtype=np.single)
np.single(doubleArr, out=singleArr)
print ("%.40f"%singleArr[0,0])
结果是
0.0000000000000000000000000000010000000032
0.0000000000000000000000000000000000000000
“out”参数的用法不正确吗?
【问题讨论】:
-
在我的
numpy版本中,np.single(np.float32) 没有out参数。 -
@hpaulj 是正确的——
np.float32没有使用out参数。在旧版本的 numpy 中,np.float32(又名np.single)的未知关键字参数被忽略。比如1.8.0版本,我可以写np.float32(123, foobar="plate of shrimp"),不会产生错误。我不知道这是什么时候修复的。您使用的是哪个版本的 numpy?您可以通过import numpy as np; print(np.__version__)查询 -
我正在使用 '1.17.4' 。所以本质上,outparameter 被忽略了?
-
有没有办法在不创建额外分配的情况下实现演员表?
-
是的,
out被忽略。如果您已经创建了数组,您可以简单地分配值:singleArr[...] = doubleArr。
标签: python numpy casting floating-point precision