gpt4 book ai didi

python - 如何访问 numpy ndarray 的元素?

转载 作者:太空狗 更新时间:2023-10-30 00:54:25 25 4
gpt4 key购买 nike

我正在使用 scipy 的 loadmat 函数将 matlab 数据文件加载到 python 中。

from scipy.io import loadmat  

data = loadmat('data.mat')
fields = data['field']

字段的类型是numpy.ndarray:

print 'fields type={}'.format(type(fields))
print 'fields dtype={}'.format(fields.dtype)
print 'fields shape={}'.format(fields.shape)
fields type=<type 'numpy.ndarray'>
fields dtype=object
fields shape=(5,)

我使用 nditer 遍历数组:

for x in np.nditer(fields, flags=['refs_ok']):
print 'x={}'.format(x)
print 'x type={}'.format(type(x))
print 'x dtype={}'.format(x.dtype)
print 'x shape={}'.format(x.shape)
break
x=[u'ACE']
x type=<type 'numpy.ndarray'>
x dtype=object
x shape=()

索引错误:

如果我尝试访问 x 的第一个元素,我会得到一个 IndexError:

x[0]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-102-8c374ae22096> in <module>()
17 print 'type={}'.format(type(x))
18 print 'dtype={}'.format(x.dtype)
---> 19 x[0]
20 break
21

IndexError: too many indices for array

问题:

  • 如果 type(x) 返回 nump.ndarray 怎么会说“数组的索引太多”?
  • 如何将 x 的内容提取到字符串中?

以下是我使用的版本:

print 'python version: {}'.format(sys.version)
print 'numpy version: {}'.format(numpy.__version__)
print 'scipy version: {}'.format(scipy.__version__)
python version: 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2]
numpy version: 1.11.0
scipy version: 0.17.1

最佳答案

无需详细查看您的错误,我可以指出一些陷阱。

.mat 将包含 MATLAB 矩阵(始终为 2d 或更高)、单元格和结构。

loadmat 以各种方式呈现它们。有些词典必须按名称索引。有对象数组(dtype=object)。并且有 nd 数字或字符串数​​组。您可能需要通过多个级别才能获得数字数组。

检查数组的“形状”(大小)及其“dtype”。如果 shape 是 ()dtype 对象,则用 y=x[()] 提取它。

这是一个这样的 0d 对象数组的例子:

In [4]: y=np.arange(3)

In [5]: x=np.empty((), dtype=object)
In [6]: x[()]=y

In [7]: x
Out[7]: array(array([0, 1, 2]), dtype=object)

In [8]: x.shape
Out[8]: ()

In [9]: x.dtype
Out[9]: dtype('O')

In [10]: x[0]
...
IndexError: too many indices for array

In [11]: x[()]
Out[11]: array([0, 1, 2])

x 是一个 0d 数组 (x.ndim),因此它必须使用 0 元素元组 () 进行索引。对于 MATLAB 程序员来说,这可能看起来很奇怪。

numpy(通常是 Python)中,x[a,b,c]x[(a,b,c)] 相同ind=(a,b,c); x[ind]。换句话说,[] 中的参数被理解为一个值元组。 (1,2) 是一个 2 元素元组,(1,) 是一个元素((1) 只是一个分组),并且() 是一个 0 元素的元组。所以 x[()] 只是常规 nd 索引符号的扩展。这不是特例。

关于python - 如何访问 numpy ndarray 的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37996883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com