这可能是因为你混合吸气剂 and setters预防反向传播.
这是因为你使用mark1
作为索引器:
>>> mask1
array([False, True, False, False, True, False], dtype=bool)
现在通过设置a[mask1] = 100
,您将设置所有元素mask1
是真的,因此导致
>>> a
array([ 1, 100, 3, 4, 100, 6])
请注意,可以这么说,您只调用了“setter”a
.
Now for a[mask1][mask2] = 100
实际上你同时调用了 getter 和 setter。事实上,你可以将其写为:
temp = a[mask1] #getter
temp[mask2] = 2#setter
因此您只需设置中的值temp
,因此该值不是“反向传播“ 可以这么说a
本身。你应该看到temp
as a copy(尽管在内部Python解释器肯定有可能以不同的方式处理它)。
Note:请注意,在某些情况下此行为可能会起作用:如果temp
例如是一个view在数组上,它可以支持向后传播。这一页 http://docs.scipy.org/doc/numpy/reference/maskedarray.generic.html例如,展示了返回视图而不是返回视图的方法copy.