1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sys
import numpy as np
def matrix2Int(data_matrix): # data_matrix is a numpy matrix2Int
data_bytes, bytes_per_elem, data_shape = data_matrix.tobytes(), data_matrix.itemsize,data_matrix.shape
int_list = []
for i in range(0, len(data_bytes), bytes_per_elem):
int_list.append(int.from_bytes(data_bytes[i:i+bytes_per_elem-1], byteorder=sys.byteorder))
return int_list, data_shape, data_matrix.dtype

def int2Matrix(int_list, data_shape, data_dtype):
# 4. int to bytes
bytes_per_elem = np.dtype(data_dtype).itemsize
recovered_bytes = [i.to_bytes(
bytes_per_elem, byteorder=sys.byteorder) for i in int_list]
# print(f"recovered_bytes:{recovered_bytes}")
# 5. bytes to numpy array
y = np.frombuffer(b''.join(recovered_bytes), dtype=data_dtype)
return y.reshape(data_shape)

.tobytes() 将 numpy 矩阵转换为字节字符串,.itemsize 获得矩阵中单个元素的字节大小,便于后续恢复元素类型,例如 float64,int64 等。

大整数和字节字符串之间的转换操作并不常见。然而,在一些应用领域有时候也会出现,比如密码学或者网络。

参考

3.5 字节到大整数的打包与解包 — python3-cookbook 3.0.0 文档