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

时间:2011-03-04 20:43:55

标签: 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

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

感谢。

1 个答案:

答案 0 :(得分:9)

您正在设置临时值。

numrec[["col1", "col2"]]

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

>>> numrec[["col1", "col2"]].flags["OWNDATA"]
True

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

比较

>>> numrec[["col1"]].flags["OWNDATA"]
True
>>> numrec["col1"].flags["OWNDATA"]
False

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

>>> id(numrec["col1"].base) == id(numrec)
True