Python Numpy - 无法正确保存/加载数组

Posted

技术标签:

【中文标题】Python Numpy - 无法正确保存/加载数组【英文标题】:Python Numpy - cannot get array to save/load properly 【发布时间】:2020-01-30 14:36:14 【问题描述】:

我试图在一个程序中保存一个数组并在另一个程序中打开它,我的数组是

[[   0. 2815. 3286. 4060. 2877. 2236.]
 [2798.    0.  471. 1245. 1586. 1931.]
 [3165.  367.    0. 1006. 1556. 1902.]
 [3724. 1268. 1739.    0.  551.  896.]
 [3344. 1573. 1575. 2030.    0.  515.]
 [2925. 1923. 1925. 2380.  641.    0.]]

保存它我正在使用:

def saveArray(array):

    import numpy as np
    np.save('postCodeArray', array)

然后打开它我正在使用

def callFunction():

    import numpy as np

    array = np.load('postCodeArray.npy')  

    print(array)

我收到这个错误

" 文件“C:\Users\wf5931\AppData\Local\Continuum\anaconda3\lib\site-packages\numpy\lib\format.py”,第 696 行,在 read_array raise ValueError("无法加载对象数组时"

ValueError:allow_pickle=False 时无法加载对象数组

请帮忙!

当我尝试使用类似的 np.zeros((4,4)) 矩阵时,它似乎可以工作。 V 困惑

【问题讨论】:

您确定代码中的变量array 是一个数组而不是一个列表吗?如果是数组,检查它的 dtype (array.dtype),如果是 object 数组,则将其转换为 floatint (array.astype('float32')) How to fix 'Object arrays cannot be loaded when allow_pickle=False' for imdb.load_data() function?的可能重复 您的数组很可能是 object dtype。 np.zeros 是一个浮点数据类型。对象 dtype 数组必须使用 pickle 来保存对象元素。在较新的numpy 版本中,您必须在加载此类数组时显式地allow_pickle。这是为了提高安全性。 我在使用 numpy 1.17 时遇到了同样的问题。这不是对错误根本原因的解释,也不是解决方案,而是一种解决方法 - 将 numpy 降级到 1.16.2。例如,“pip install -U numpy=1.16.2”或“conda install numpy=1.16.2”为我解决了这个问题, 【参考方案1】:

numpy.save(file, arr, allow_pickle=True, fix_imports=True) 的documentation 和您收到的错误消息中,试试这个:

def saveArray(array):

    import numpy as np
    np.save('postCodeArray', array, allow_pickle=True)

与负载相同,documentation,numpy.load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII')

def callFunction():

    import numpy as np
    array = np.load('postCodeArray.npy', allow_pickle=True)  
    print(array)

适用于 Python 3.7 和 Numpy 1.16.1。

编辑:使用的数组。

A = np.asarray([[   0, 2815, 3286, 4060, 2877, 2236],
                [2798,    0,  471, 1245, 1586, 1931],
                [3165,  367,    0, 1006, 1556, 1902],
                [3724, 1268, 1739,    0,  551,  896],
                [3344, 1573, 1575, 2030,    0,  515],
                [2925, 1923, 1925, 2380,  641,    0]])

【讨论】:

感谢您的帮助!当我这样做时,我在新程序中返回 None @AlexanderSchamroth-Green 完全分享您所做的...当我运行它时,它会保存并加载数组。我添加了我使用的数组。 + 您分享的内容没有回报,只有打印。 @AlexanderSchamroth-Green 即请分享一段我们可以复制/粘贴的代码,它会引发错误/显示问题。

以上是关于Python Numpy - 无法正确保存/加载数组的主要内容,如果未能解决你的问题,请参考以下文章

Python OpenCV RTrees 无法正确加载

从使用 numpy.save(...) 保存的文件中将 numpy 数组加载到 C 中

Python - 尝试使用 PIL 的 Image.fromarray 保存 numpy 数组时出现 TypeError

OpenCV---图像加载与保存

python3.5中,无法numpy怎么解决?

python3.5中,无法numpy怎么解决