我正在尝试学习如何使用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
以上不起作用。这些值不会添加到指定的列中。令人惊讶的是,当我运行它时,我没有任何错误。有人可以解释一下发生了什么吗?
感谢。
答案 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