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
数组,则将其转换为 float
或 int
(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 - 无法正确保存/加载数组的主要内容,如果未能解决你的问题,请参考以下文章
从使用 numpy.save(...) 保存的文件中将 numpy 数组加载到 C 中
Python - 尝试使用 PIL 的 Image.fromarray 保存 numpy 数组时出现 TypeError