Python 结构化numpy ndarray,如何获取值

Python 结构化numpy ndarray,如何获取值,python,numpy,dictionary,key-value,numpy-ndarray,Python,Numpy,Dictionary,Key Value,Numpy Ndarray,我有一个结构化的numpy ndarray la={'val1':0,'val2':1},我想使用0和1作为键返回VAL,所以当我有0时我希望返回val1,当我有1时返回val2,这应该很简单,但是我的尝试失败了,因为我不熟悉这个结构 如何仅返回相应的val,或返回所有val的数组,以便按顺序读取?这看起来像字典,而不是数据数组。假设没有多个键与同一个值关联,则使用 la_reversed = {v: k for k, v in la.items()} 因此,la_reversed[0]将是'

我有一个结构化的numpy ndarray la={'val1':0,'val2':1},我想使用0和1作为键返回VAL,所以当我有0时我希望返回val1,当我有1时返回val2,这应该很简单,但是我的尝试失败了,因为我不熟悉这个结构


如何仅返回相应的val,或返回所有val的数组,以便按顺序读取?

这看起来像字典,而不是数据数组。假设没有多个键与同一个值关联,则使用

la_reversed = {v: k for k, v in la.items()}
因此,
la_reversed[0]
将是
'val1'
la_reversed[1]
将是
'val2'


您可以使用
list(la.values())
在字典中获得一个值列表,它看起来像字典,而不是数据数组。假设没有多个键与同一个值关联,则使用

la_reversed = {v: k for k, v in la.items()}
因此,
la_reversed[0]
将是
'val1'
la_reversed[1]
将是
'val2'


您可以使用
list(la.values())

在字典中获得一个值列表,刚刚发现我可以使用la.tolist(),它以某种方式返回一个字典?当我想要一份清单时,唉,从那以后我就能够解决我的问题了

刚刚发现我可以使用la.tolist()并以某种方式返回字典?当我想要一份清单时,唉,从那以后我就能够解决我的问题了

保存Python对象(非数组)时,
numpy
将其包装在数组中。对象已被
pickle

In [112]: np.save('test.npy', {'foo':34})                                              
在较新的
numpy
版本中,必须明确允许它加载pickled项:

In [113]: data = np.load('test.npy')                                                   
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-113-c5835e6fb31e> in <module>
----> 1 data = np.load('test.npy')

/usr/local/lib/python3.6/dist-packages/numpy/lib/npyio.py in load(file, mmap_mode, allow_pickle, fix_imports, encoding)
    451             else:
    452                 return format.read_array(fid, allow_pickle=allow_pickle,
--> 453                                          pickle_kwargs=pickle_kwargs)
    454         else:
    455             # Try a pickle

/usr/local/lib/python3.6/dist-packages/numpy/lib/format.py in read_array(fp, allow_pickle, pickle_kwargs)
    720         # The array contained Python objects. We need to unpickle the data.
    721         if not allow_pickle:
--> 722             raise ValueError("Object arrays cannot be loaded when "
    723                              "allow_pickle=False")
    724         if pickle_kwargs is None:

ValueError: Object arrays cannot be loaded when allow_pickle=False


In [115]: data = np.load('test.npy',allow_pickle=True)                                 
In [116]: data                                                                         
tolist
可以提取该对象,也可以提取
item()


保存Python对象(非数组)时,
numpy
将其包装到数组中。对象已被
pickle

In [112]: np.save('test.npy', {'foo':34})                                              
在较新的
numpy
版本中,必须明确允许它加载pickled项:

In [113]: data = np.load('test.npy')                                                   
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-113-c5835e6fb31e> in <module>
----> 1 data = np.load('test.npy')

/usr/local/lib/python3.6/dist-packages/numpy/lib/npyio.py in load(file, mmap_mode, allow_pickle, fix_imports, encoding)
    451             else:
    452                 return format.read_array(fid, allow_pickle=allow_pickle,
--> 453                                          pickle_kwargs=pickle_kwargs)
    454         else:
    455             # Try a pickle

/usr/local/lib/python3.6/dist-packages/numpy/lib/format.py in read_array(fp, allow_pickle, pickle_kwargs)
    720         # The array contained Python objects. We need to unpickle the data.
    721         if not allow_pickle:
--> 722             raise ValueError("Object arrays cannot be loaded when "
    723                              "allow_pickle=False")
    724         if pickle_kwargs is None:

ValueError: Object arrays cannot be loaded when allow_pickle=False


In [115]: data = np.load('test.npy',allow_pickle=True)                                 
In [116]: data                                                                         
tolist
可以提取该对象,也可以提取
item()


{'val1':0,'val2':1}
是一个字典,而不是结构化数组。如果您确实有一个,请共享一个This
{'val1':0,'val2':1}
,它是一个字典,而不是结构化数组。如果您确实有一个,请在我的调试器中共享一个,它说这是一个ndarray,当我尝试像使用字典一样使用项或值时,我得到:labels=list(lb.values())AttributeError:'numpy.ndarray'对象没有属性'values'。您是否可以编辑您的问题,以便根据yatu的注释包含MCVE,或者至少在代码中包含此变量的声明?它是一个保存为.npy的变量,该变量实际上是我在keras中创建训练数据集生成器时获得的类索引值:train_generator.class_index,here(),它说:包含从类名到类索引的映射的字典可以通过属性class_index获得。我将其保存为:labels=(train_generator.class_index)np.save('/home/d/Desktop/s/classes',labels),如果文档说明类_索引应该是字典,我不知道为什么你的代码中不会出现这种情况。同样,如果您提供更多的代码,将更容易确定问题是什么。在我的调试器中,它表示这是一个数据数组,当我尝试使用项或值时,我会得到:labels=list(lb.values())AttributeError:'numpy.ndarray'对象没有属性'values'。您是否可以编辑您的问题,以便根据yatu的注释包含MCVE,或者至少在代码中包含此变量的声明?它是一个保存为.npy的变量,该变量实际上是我在keras中创建训练数据集生成器时获得的类索引值:train_generator.class_index,here(),它说:包含从类名到类索引的映射的字典可以通过属性class_index获得。我将其保存为:labels=(train_generator.class_index)np.save('/home/d/Desktop/s/classes',labels),如果文档说明类_索引应该是字典,我不知道为什么你的代码中不会出现这种情况。同样,如果您提供更多的代码,就更容易确定问题所在。