Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法从npz文件加载非数组_Python_Numpy_Io - Fatal编程技术网

Python 无法从npz文件加载非数组

Python 无法从npz文件加载非数组,python,numpy,io,Python,Numpy,Io,我需要将几个numpy数组和Python对象保存到磁盘。我想完全最小化I/O。我不介意加载程序或保存程序是否必须在内存中执行任何提升操作,但I/O占用空间(实际访问)应该是最低的,因为当多个作业同时访问文件系统时,集群中会出现问题 我试过: import numpy as np my_data = dict() my_data['r1'] = np.random.randint(3, size=(100,200)) my_data['rs'] = np.random.randint(3, s

我需要将几个numpy数组和Python对象保存到磁盘。我想完全最小化I/O。我不介意加载程序或保存程序是否必须在内存中执行任何提升操作,但I/O占用空间(实际访问)应该是最低的,因为当多个作业同时访问文件系统时,集群中会出现问题

我试过:

import numpy as np

my_data = dict()

my_data['r1'] = np.random.randint(3, size=(100,200))
my_data['rs'] = np.random.randint(3, size=(50,400))

my_data['annotation_info'] = 'Two random arrays'
my_data['current_date']    = 'July 28' 

np.savez('test.npz', my_data = my_data)
但当我加载这个时,我得到:

temp = np.load('test.npz')
my_data = temp['my_data']
my_data['r1']

ValueError: field named features not found
另外,
my_data
现在似乎是一个数组,其中
my_data.shape
返回
()
。奇怪的是,如果我这样做了:

print(my_data)
我得到:

{'current_date': 'July 28', 'rs': array([[0, 1, 0, ..., 0, 2, 0],
       [1, 1, 1, ..., 1, 1, 0],
       [2, 1, 1, ..., 1, 1, 0],
       ..., 
       [1, 0, 2, ..., 2, 0, 1],
       [0, 2, 0, ..., 1, 1, 0],
       [1, 1, 0, ..., 1, 1, 1]]), 'annotation_info': 'Two random arrays', '
r1': array([[2, 0, 1, ..., 0, 2, 2],                                      
       [0, 0, 2, ..., 0, 2, 1],
       [2, 2, 2, ..., 1, 0, 0],
       ..., 
       [0, 2, 1, ..., 2, 0, 0],
       [0, 0, 1, ..., 2, 1, 0],
       [2, 1, 2, ..., 0, 2, 2]])}
更新 如果我按照unutbu的建议行事:

np.savez('test.npz', **my_data)
my_data = np.load('test.npz')
my_variable = my_data['annotation_info']
my_变量
不是字符串,例如
my_变量。upper()
返回:

numpy.ndarray object has no attribute 'upper' 
实际上
type(my_变量)
返回:

numpy.ndarray
但是同样,
my_variable[0]
抛出一个错误,并且
my_variable.shape
返回
()
(似乎是一个)

如何访问存储在阵列中的实际对象?

试试看

np.savez('test.npz', **my_data)
my_data = np.load('test.npz')
print(my_data['r1'])
NumPy将字符串保存为NumPy数组。要将字符串作为Python对象访问,可以使用
item
方法:

my_data = np.load('test.npz')
my_variable = my_data['annotation_info'].item()
试一试

NumPy将字符串保存为NumPy数组。要将字符串作为Python对象访问,可以使用
item
方法:

my_data = np.load('test.npz')
my_variable = my_data['annotation_info'].item()