gpt4 book ai didi

python - 为什么 numpy View 向后?

转载 作者:行者123 更新时间:2023-12-04 13:37:36 25 4
gpt4 key购买 nike

import numpy as np
data = np.array([0, 0, 0, 0, 0, 0, 0, 1], dtype=np.uint8)
data.view(np.uint64)

我期望的是二进制文件是:
0b0000000000000000000000000000000000000000000000000000000000000001

而是将 8 位组颠倒过来。
np.array([72057594037927936], dtype=np.uint64)

即:
0b0000000100000000000000000000000000000000000000000000000000000000

这是为什么?
是否正在进行计算来逆转这一点,或者这只是布局?

最佳答案

您的假设对于二进制数据在数组中的顺序是正确的。而不是查看为 uint64 ,您可以查看为 8 个字节(V8 dtype):

import numpy as np
np.array([0, 0, 0, 0, 0, 0, 0, 1], dtype=np.uint8).view('V8')[0]
# void(b'\x00\x00\x00\x00\x00\x00\x00\x01')

但是您的 CPU 正在使用 little endian字节的顺序来表示整数。这意味着当查看字节为 uint64 时,你会得到一个非常大的数字。

您可以使用 struct 进行如下检查包裹:

import struct
import sys

print(sys.bybteorder)
# 'little'

# view these bytes as uint64 with little endian gives a big number
struct.unpack('<Q', b'\x00\x00\x00\x00\x00\x00\x00\x01')[0]
# 72057594037927936

# view these bytes as uint64 with big endian gives 1
struct.unpack('>Q', b'\x00\x00\x00\x00\x00\x00\x00\x01')[0]
# 1

# view these bytes as uint64 with native endian gives a big number with your CPU
struct.unpack('=Q', b'\x00\x00\x00\x00\x00\x00\x00\x01')[0]
# 72057594037927936

关于python - 为什么 numpy View 向后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60814006/

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