【问题标题】:converting dtype of numpy array changes its contents/values转换 numpy 数组的 dtype 会更改其内容/值
【发布时间】:2021-03-23 17:04:40
【问题描述】:
>>>import numpy as np
>>>np.__version__
'1.18.5'

>>>a = np.linspace(202012121024, 202012131024, dtype=np.float64).reshape(5,5,2)
>>>a[0, 0, 0]
202012121024.0

>>>int(a[0, 0, 0])
202012121024

>>>b = a.astype('float32')
>>>b[0, 0, 0]
202012110000.0         

>>>int(b[0, 0, 0])
202012114944

为什么值首先通过简单地更改a 的dtype 并将其分配给b 然后甚至对于b,如果我将其一个值更改为int,即转换的实际值更改为integer

【问题讨论】:

    标签: python numpy multidimensional-array numpy-ndarray numpy-slicing


    【解决方案1】:

    这是因为你将b设置为a.astype('float32')尝试而不是a.astype('float64')并将其分配给b,那么a and b的值将是相同的。

    import numpy as np
    a = np.linspace(202012121024, 202012131024, dtype=np.float64).reshape(5,5,2)
    print(a[0, 0, 0])
    print(int(a[0, 0, 0]))
    b = a.astype('float64')
    print(b[0, 0, 0]
    

    输出

    202012121024.0
    202012121024
    202012121024.0
    

    【讨论】:

    • float32 不能处理这个值吗?由于内存限制,我必须将数组更改为 32 位。有没有其他方法可以将数组类型转换为float32
    • @AtherCheema float32 是 32 位数字 - float64 使用 64 位数字。您在 np 中设置的数字是一个长浮点值。因此,必须将值存储在 64 位方法中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2018-04-07
    • 2011-04-23
    相关资源
    最近更新 更多