使用numpy命名数组时,我观察到以下两种情况下的不同行为:
下面的代码给出了一个示例
import numpy as np
a = np.ones(5)
data = np.array(zip(a, a, a), dtype=[("x", float), ("y", float), ("z", float)])
# case 1
# does not set elements 1, 3 and 4 of data to 22
data[[1, 3, 4]]["y"] = 22
print data["y"] # -> [ 1. 1. 1. 1. 1.]
# case 2
# set elements 1, 3 and 4 of data to 22
data["y"][[1, 3, 4]] = 22
print data["y"] # -> [ 1. 22. 1. 22. 22.]
两个打印命令的输出为 [ 1. 1111.]和[1。2212222.]. 为什么在设置元素时更改选择顺序会导致不同的结果?你知道吗
使用列表或数组always returns a copy rather than a view索引:
因此赋值
data[[1, 3, 4]]["y"] = 22
是修改data[[1, 3, 4]]
的副本,而data
中的原始值将不受影响。你知道吗另一方面,引用结构化数组returns a view的字段:
因此给
data["y"][[1, 3, 4]]
赋值将影响data
中相应的元素。你知道吗相关问题 更多 >
编程相关推荐