Python 使用Numpy.save保存Numpy二维数组列表(数组一起呈锯齿状)

Python 使用Numpy.save保存Numpy二维数组列表(数组一起呈锯齿状),python,arrays,numpy,Python,Arrays,Numpy,我有一个大的图像数据集。当我使用图像时,我有几个组件——镜像图像、规则图像、特征向量矩阵和特征值向量 我想将其存储为: training_sunsets_data = [cropped_training_sunsets, mirrored_training_sunsets, rgb_cov_eigvec_training_sunsets, rgb_

我有一个大的图像数据集。当我使用图像时,我有几个组件——镜像图像、规则图像、特征向量矩阵和特征值向量

我想将其存储为:

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中创建锯齿状数组的后门方法?

因此,为了了解您的想法,让我们运行一些代码

>>> 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)
>a=[np.数组([[1,2,3],[4,5,6]),np.数组([[1,2],[3,4]])]
>>>类型(a)
>>>np.数组(a)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:无法将输入数组从形状(2,3)广播到形状(2)
我们在这里看到,我们完全能够列出不同维度的np.数组。然而,我们不能将该列表转换为np.array


根据您的语法,我怀疑您正在保存一个列表,并加载一个列表,为列表中的每个元素维护np.array类型。

在我的机器上测试后:

  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
来打包这些对象


因此,您没有找到后门,它的行为与预期的一样。

np.savez()在您的情况下可以工作。将每个文件另存为变量。

您可以发布加载文件时获得的锯齿状
ndarray
吗?我很想看看它是什么样子。看看
np.savez
。它将每个数组按名称保存在一个文件中,并将它们收集到
zip
存档中
np.load
处理这种归档。这里有一个很好的答案:……如果您愿意,您还可以使用pickle来存储数组集/序列。