为何np.astype('uint8')在Windows与Mac系统下结果不同?
Numpy数组float32转uint8跨系统结果不一致的问题
问题现象
我有一个形状为(1000,1000,3)、dtype='float32'的Numpy数组,将其转换为dtype='uint8'时,Windows与Mac系统得到的结果不同。
Mac系统运行结果:
>>> import numpy as np >>> X = np.load('image.npy') >>> X = X.astype('uint8') >>> X.sum() 167942490
Windows系统运行结果:
>>> import numpy as np >>> X = np.load('image.npy') >>> X = X.astype('uint8') >>> X.sum() 323510676
最小复现代码
使用以下数组可复现该问题:
import numpy as np X = np.array([ [[46410., 42585., 32640.], [45645., 41820., 31875.], [45390., 41310., 32130.]], [[44880., 41055., 31110.], [44115., 40290., 30345.], [46410., 42330., 33150.]], [[45390., 41310., 32130.], [46155., 42075., 32895.], [42840., 38760., 30090.]]], dtype=np.float32) print(X.sum(), X.astype('uint8').sum())
- Windows系统输出:
1065135.0 2735 - Mac系统输出:
1065135.0 1860
不同版本测试结果
以下是不同操作系统、Python及Numpy版本的测试结果:
Python 3.8.8 (Win) Numpy 1.22.4 => 1065135.0 2735 Python 3.10.6 (Mac) Numpy 1.24.2 => 1065135.0 2735 Python 3.7.12 (Mac) Numpy 1.21.6 => 1065135.0 1860
内容的提问来源于stack exchange,提问作者nickponline
相关产品推荐
相关产品推荐

