繁体   English   中英

使用numpy.save保存Numpy 2D数组列表(这些数组一起是锯齿状的)

[英]Saving List of Numpy 2D arrays using numpy.save (the arrays together are jagged)

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

我想存储它像:

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

在我的机器上测试后:

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

所以你没有找到后门,它表现得像预期的那样。

所以,为了看看你得到了什么,让我们运行一些代码。

>>> 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的列表。

np.savez()适合你的情况。 将每个保存为变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM