numpy结构化数组:帮助理解输出

Cur*_*arn 0 python numpy recarray

我正在尝试学习如何使用numpy的结构化数组.具体来说,我试图一次向多个字段添加信息.我试过了:

import numpy as np

numrec = np.zeros(8, dtype=[('col0', 'int16'), ('col1', 'int16'),
                            ('col2', 'int16'), ('col3', 'int16')])

numrec[['col1','col2']][0:2] = [(3,5), (1,8)]
print numrec
Run Code Online (Sandbox Code Playgroud)

以上不起作用.这些值不会添加到指定的列中.令人惊讶的是,当我运行它时,我没有收到任何错误.有人可以解释一下发生了什么吗?

谢谢.

AFo*_*lia 9

您正在设置临时值.

numrec[["col1", "col2"]]
Run Code Online (Sandbox Code Playgroud)

返回数组的副本.你可以通过OWNDATA标志看到这一点.

>>> numrec[["col1", "col2"]].flags["OWNDATA"]
True
Run Code Online (Sandbox Code Playgroud)

使用列表索引numpy数组时,numpy会返回数据的副本.它必须是副本,因为通常,列表可能无法解析为基础数据的常规有序视图.(这适用于任何numpy数组,而不仅仅是结构化数组.)

相比

>>> numrec[["col1"]].flags["OWNDATA"]
True
>>> numrec["col1"].flags["OWNDATA"]
False
Run Code Online (Sandbox Code Playgroud)

此外,如果numpy数组是视图,则基本成员将保存基础数组.

>>> id(numrec["col1"].base) == id(numrec)
True
Run Code Online (Sandbox Code Playgroud)

  • 发现.值得一提的是,所有"花式索引"数组都是如此,而不仅仅是结构化数组.我将在此处提供此相关最近帖子的链接:http://stackoverflow.com/questions/5127991/can-i-get-a-view-of-a-numpy-array-at-specified-indexes-一个 - 视图 - 从-花式索引 (5认同)