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
以外的其他内容来保存此对象。这是否回答了您的问题?部分地,我想我会编辑一点我的问题。这回答了你的问题吗?在某种程度上,我想我会修改一下我的问题