python - 关于 recarray 多字段索引的文档

标签 python numpy recarray

numpy docs一次访问多个字段部分中, 说:

请注意,字段总是以相同的顺序返回,不管它们被要求的顺序如何

文档还给出了一个例子如下:

>>> x = np.array([(1.5,2.5,(1.0,2.0)),(3.,4.,(4.,5.)),(1.,3.,(2.,6.))],
        dtype=[('x','f4'),('y',np.float32),('value','f4',(2,2))])
>>> x[['x','y']]
array([(1.5, 2.5), (3.0, 4.0), (1.0, 3.0)],
     dtype=[('x', '<f4'), ('y', '<f4')])
>>> x[['y','x']]
array([(1.5, 2.5), (3.0, 4.0), (1.0, 3.0)],
     dtype=[('x', '<f4'), ('y', '<f4')])

但是,我自己用 numpy 1.6.1 运行代码并得到不同的结果:

In [20]: x = np.array([(1.5,2.5,(1.0,2.0)),(3.,4.,(4.,5.)),(1.,3.,(2.,6.))],
   ....:         dtype=[('x','f4'),('y',np.float32),('value','f4',(2,2))])

In [21]: x[['x','y']]
Out[21]:
array([(1.5, 2.5), (3.0, 4.0), (1.0, 3.0)],
      dtype=[('x', '<f4'), ('y', '<f4')])

In [22]: x[['y','x']]
Out[22]:
array([(2.5, 1.5), (4.0, 3.0), (3.0, 1.0)],
      dtype=[('y', '<f4'), ('x', '<f4')])

这种行为是从 numpy 1.6 更改为 1.7 还是我遗漏了什么?

编辑 我已经在 numpy 1.7.1 中测试了代码,结果与 numpy 1.6 相同。

最佳答案

看起来好像文档刚刚过时。

生成结果数组的代码在函数 _index_fields() 中在 numpy/core/_internal.py 中。

a change between v1.5 and v1.6 on March 22nd, 2011来自...

new_dtype = [(name, dt[name]) for name in dt.names if name in fields]

...到...

new_dtype = [(name, dt[name]) for name in fields if name in dt.names]

...因此结果数组中字段的顺序从原始数据类型中指定的顺序更改为访问字段时指定字段的顺序。

但是,OP 中引用的文档部分是 added on March 1st, 2011 ,更改前三周。

关于python - 关于 recarray 多字段索引的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17181668/

相关文章:

python - .dtype 是做什么的?

python - 将带有字符串的结构化 numpy 数组传递给 cython 函数

python - 为什么我的 openpyxl WorkBook.active() 给我一个 TypeError : Object is not callable?

python - 迭代可变数量的表行时出现 IndexError

python - 如何计算numpy数组中图像的平均颜色?

python - 使用 numpy 进行下采样

python - Fortran 有序(列优先)numpy 结构化数组可能吗?

python - 单击网页上的隐形按钮(谷歌地图)

performance - 将 3D numpy 数组拆分为 3D block