Python 什么是;[()]”;当调用numpy数组时是什么意思?

Python 什么是;[()]”;当调用numpy数组时是什么意思?,python,numpy,Python,Numpy,我刚刚遇到了这段代码: x = np.load(lc_path, allow_pickle=True)[()] 我以前从未见过这种模式:[()]。它做什么?为什么这个语法正确 所以我猜a是一个dict由于某种原因被保存它的人包装在一个数组中它是一种索引0d数组的方法(唯一的方法): In [475]: x=np.array(21) In [476]:

我刚刚遇到了这段代码:

x = np.load(lc_path, allow_pickle=True)[()]
我以前从未见过这种模式:
[()]
。它做什么?为什么这个语法正确


所以我猜
a
是一个
dict
由于某种原因被保存它的人包装在一个数组中

它是一种索引0d数组的方法(唯一的方法):

In [475]: x=np.array(21)                                                                       
In [476]: x                                                                                    
Out[476]: array(21)
In [477]: x.shape                                                                              
Out[477]: ()
In [478]: x[()]                                                                                
Out[478]: 21
实际上,它将元素从数组中拉出<代码>项()是另一种方式:

In [479]: x.item()                                                                             
Out[479]: 21
In [480]: x.ndim                                                                               
Out[480]: 0

最有可能的是
np.save
被赋予了一个非数组;并包装在0d对象数据类型数组中以保存它。这是一种恢复该对象的方法

In [481]: np.save('test.npy', {'a':1})                                                         
In [482]: x = np.load('test.npy', allow_pickle=True)                                           
In [483]: x                                                                                    
Out[483]: array({'a': 1}, dtype=object)
In [484]: x.ndim                                                                               
Out[484]: 0
In [485]: x[()]                                                                                
Out[485]: {'a': 1}
通常,当我们索引一个AND数组时,例如
x[1,2]
我们实际上是在做
x[(1,2)]
,也就是说,使用一个对应于维数的元组。如果
x
是0d,则唯一有效的元组是空元组,
()

它是索引0d数组的唯一方法:

In [475]: x=np.array(21)                                                                       
In [476]: x                                                                                    
Out[476]: array(21)
In [477]: x.shape                                                                              
Out[477]: ()
In [478]: x[()]                                                                                
Out[478]: 21
实际上,它将元素从数组中拉出<代码>项()是另一种方式:

In [479]: x.item()                                                                             
Out[479]: 21
In [480]: x.ndim                                                                               
Out[480]: 0

最有可能的是
np.save
被赋予了一个非数组;并包装在0d对象数据类型数组中以保存它。这是一种恢复该对象的方法

In [481]: np.save('test.npy', {'a':1})                                                         
In [482]: x = np.load('test.npy', allow_pickle=True)                                           
In [483]: x                                                                                    
Out[483]: array({'a': 1}, dtype=object)
In [484]: x.ndim                                                                               
Out[484]: 0
In [485]: x[()]                                                                                
Out[485]: {'a': 1}

通常,当我们索引一个AND数组时,例如
x[1,2]
我们实际上是在做
x[(1,2)]
,也就是说,使用一个对应于维数的元组。如果
x
为0d,则唯一有效的元组是一个空元组,
()

,它使用索引为0的元组索引数组。对于大多数数组,这只生成整个数组的视图,但对于0维数组,它将数组的单个元素提取为标量

在本例中,似乎有人做出了一个奇怪的选择,将非NumPy对象转储到带有
NumPy.save
的数组中,从而导致NumPy保存了一个0维数组
object
dtype,该数组包含原始对象。使用
allow_pickle=True
和空元组索引从0维数组中提取对象


他们可能应该选择除
numpy.save
以外的其他内容来保存此对象。

这是用0个索引的元组对数组进行索引。对于大多数数组,这只生成整个数组的视图,但对于0维数组,它将数组的单个元素提取为标量

在本例中,似乎有人做出了一个奇怪的选择,将非NumPy对象转储到带有
NumPy.save
的数组中,从而导致NumPy保存了一个0维数组
object
dtype,该数组包含原始对象。使用
allow_pickle=True
和空元组索引从0维数组中提取对象


他们可能应该选择除
numpy.save
以外的其他内容来保存此对象。

这是否回答了您的问题?部分地,我想我会编辑一点我的问题。这回答了你的问题吗?在某种程度上,我想我会修改一下我的问题