【问题标题】:Python Numpy - cannot get array to save/load properlyPython Numpy - 无法正确保存/加载数组
【发布时间】: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'))
  • 您的数组很可能是 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”为我解决了这个问题,

标签: python numpy


【解决方案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)

与负载相同,documentationnumpy.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 即请分享一段我们可以复制/粘贴的代码,它会引发错误/显示问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 2019-12-10
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2017-05-15
  • 2015-10-07
相关资源
最近更新 更多