为什么酸洗 numpy 数组的开销很大?
Why is there a large overhead in pickling numpy arrays?
假设我在 Python 中有一个简单数组:
>>> x = [1.0, 2.0, 3.0, 4.0]
腌制后,它的尺寸相当小:
>>> pickle.dumps(x).__len__()
44
我用numpy数组怎么会大这么多?
>>> xn = np.array(x)
>>> pickle.dumps(xn).__len__()
187
将其转换为不太精确的数据类型只会有一点帮助...
>>> x16 = xn.astype('float16')
>>> pickle.dumps(x16).__len__()
163
其他 numpy/scipy 稀疏矩阵等数据结构也不好腌制。为什么?
在调试器中检查它,一个 numpy 数组除了数据之外还有 max、min、type 等字段,我不确定 python 列表是否有。
可在 http://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html
上找到完整列表
由于 pickling 只是一个二进制复制,这些其他字段也被复制,导致更大的大小。
假设我在 Python 中有一个简单数组:
>>> x = [1.0, 2.0, 3.0, 4.0]
腌制后,它的尺寸相当小:
>>> pickle.dumps(x).__len__()
44
我用numpy数组怎么会大这么多?
>>> xn = np.array(x)
>>> pickle.dumps(xn).__len__()
187
将其转换为不太精确的数据类型只会有一点帮助...
>>> x16 = xn.astype('float16')
>>> pickle.dumps(x16).__len__()
163
其他 numpy/scipy 稀疏矩阵等数据结构也不好腌制。为什么?
在调试器中检查它,一个 numpy 数组除了数据之外还有 max、min、type 等字段,我不确定 python 列表是否有。
可在 http://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html
上找到完整列表由于 pickling 只是一个二进制复制,这些其他字段也被复制,导致更大的大小。