python - NumPy 一次保存一些数组

标签 python arrays numpy

我正在处理不同形状的数组,我想用 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)

所以,我想要的只是将两个数组保存为 mat1mat2一次。

最佳答案

如果您想以与 np.save 相同的格式保存多个数组, 使用 np.savez .

例如:

import numpy as np

arr1 = np.arange(8).reshape(2, 4)
arr2 = np.arange(10).reshape(2, 5)
np.savez('mat.npz', name1=arr1, name2=arr2)

data = np.load('mat.npz')
print data['name1']
print data['name2']

如果有多个数组,可以展开参数:

import numpy as np

data = [np.arange(8).reshape(2, 4), np.arange(10).reshape(2, 5)]
np.savez('mat.npz', *data)

container = np.load('mat.npz')
data = [container[key] for key in container]

请注意,订单不会保留。如果你确实需要保持顺序,你可以考虑使用 pickle 代替。

如果你使用pickle,一定要指定二进制协议(protocol),否则你会使用ascii pickle来写东西,这对于numpy数组来说效率特别低。使用二进制协议(protocol)时,ndarray 或多或少会选择与 np.save/np.savez 相同的格式。例如:

# Note: This is Python2.x specific. It's identical except for the import on 3.x
import cPickle as pickle
import numpy as np

data = [np.arange(8).reshape(2, 4), np.arange(10).reshape(2, 5)]

with open('mat.pkl', 'wb') as outfile:
    pickle.dump(data, outfile, pickle.HIGHEST_PROTOCOL)

with open('mat.pkl', 'rb') as infile:
    result = pickle.load(infile)

在这种情况下,resultdata 将具有相同的内容,并且将保留输入数组列表的顺序。

关于python - NumPy 一次保存一些数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35133317/

相关文章:

java - 替换 Java5 中的 Java6+ Arrays.binarySearch

java - 无法使用 JSON 解析子项

javascript - 如何通过 div 类名用 div ID 填充数组

python - append Python 3D Numpy 数组

python - 将数据帧转换为 numpy 数组时如何保持数据类型?

python - 如何找到二叉树中节点的位置?

python - "WindowsError: [Error 2] The system cannot find the file specified"未解析

python - 组合两列给出 ValueError : Wrong number of items passed 2, placement implies 1

python - 确定两个或多个 boolean 评估全部为 False 的 pythonic 方法是什么?

python - 逐帧可视化 3D-numpy-array