【发布时间】:2016-02-01 14:41:27
【问题描述】:
我正在处理不同形状的数组,我想用numpy.save 保存它们,所以,考虑一下我有
mat1 = numpy.arange(8).reshape(4, 2)
mat2 = numpy.arange(9).reshape(2, 3)
numpy.save('mat.npy', numpy.array([mat1, mat2]))
它有效。但是,当我有两个具有相同尺寸的一维矩阵时,它就不起作用了。
mat1 = numpy.arange(8).reshape(2, 4)
mat2 = numpy.arange(10).reshape(2, 5)
numpy.save('mat.npy', numpy.array([mat1, mat2]))
导致Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: could not broadcast input array from shape (2,4) into shape (2)
并注意问题是由numpy.array([mat1, mat2]) 引起的,而不是由numpy.save 引起的
我知道这样的数组是可能的:
>> numpy.array([[[1, 2]], [[1, 2], [3, 4]]])
array([[[1, 2]], [[1, 2], [3, 4]]], dtype=object)
所以,我想要的只是将两个数组同时保存为mat1 和mat2。
【问题讨论】:
-
您是否考虑过使用
np.savez或使用二进制协议来代替pickle?savez保存多个数组,save只保存一个数组。 -
它可以在我的电脑上运行。你用的是什么版本的python?
-
如果
mat1和mat2的第一个维度相同,np.array(...)会产生这个错误。您可以通过初始化np.empty((2,),object)数组并用元素数组填充它来解决此错误。如果所有维度都相同(以防止串联),也可以这样做。