Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在酸洗numpy阵列时会有很大的开销?_Python_Numpy_Pickle - Fatal编程技术网

Python 为什么在酸洗numpy阵列时会有很大的开销?

Python 为什么在酸洗numpy阵列时会有很大的开销?,python,numpy,pickle,Python,Numpy,Pickle,假设我有一个简单的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 将其转换为不太精确的数据类型只会有一点帮助 >>> x1

假设我有一个简单的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列表是否有这些字段

有关完整列表,请访问


由于pickle只是一个二进制复制,这些其他字段也被复制,从而导致更大的大小。

pickle.load(pickle.dumps(sparse.coo_matrix(x))
对我来说效果很好。
ndarray
pickle
本质上是其
np.save
的字符串版本。它有适度的开销缓冲区(200字节左右)加上一个主数据缓冲区的副本。开销有一些基本信息,如
shape
dtype
。数据缓冲区大小完全取决于元素的数量(和数据类型)。它基本上是
x.nbytes
长的。