我有一个大图像数据集。当我使用图像时,我有几个组件 - 镜像图像,常规图像,特征向量矩阵和特征值向量。
我想把它存储起来:
training_sunsets_data = [cropped_training_sunsets,
mirrored_training_sunsets,
rgb_cov_eigvec_training_sunsets,
rgb_cov_eigval_training_sunsets]
np.save('training_sunsets_data',training_sunsets_data)
当我写这篇文章时,我正在测试它(因为我确信它会失败),最奇怪的事情发生在我这样做时:它起作用了。
此外,当我将其加载回代码时,它是类型为ndarray,但它是一个锯齿状数组。
如果numpy不允许锯齿状多维数组,这怎么可能?我是否只是找到了一种后门方式来创建numpy中的锯齿状数组?
答案 0 :(得分:5)
在我的机器上测试后:
import numpy as np
np.save('testnp.npy', [[2,3,4],[1,2]])
np.load('testnp.npy')
# array([[2, 3, 4], [1, 2]], dtype=object)
如示例代码所示,加载的对象的类型为ndarray
,但其数据类型为object
。这意味着,np.save
存储一组python对象,可以是任何东西。根据文档,它似乎使用python pickle
来打包这些对象。
所以你没有找到后门,它的行为与预期一样。
答案 1 :(得分:0)
所以,看看你得到了什么,让我们运行一些代码。
>>> a =[np.array([[1,2,3],[4,5,6]]),np.array([[1,2],[3,4]])]
>>> type(a)
<type 'list'>
>>> np.array(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (2,3) into shape (2)
我们在这里看到,我们完全能够列出不同维度的np.array。但是我们不能将该列表转换为np.array。
我怀疑你的语法是保存一个列表,并为列表中的每个元素加载一个保持类型为np.array的列表。
答案 2 :(得分:0)
np.savez()可以在您遇到的情况下工作。将它们另存为变量。