0

我正在尝试学习如何使用 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

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

谢谢。

4

1 回答 1

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
于 2011-03-04T21:25:15.370 回答