当我有一个带有布尔索引的结构化掩码数组时,在什么情况下可以获得视图以及何时获得副本?文档说高级索引总是返回一个副本,但这不是真的,因为X[X>0]=42
技术上高级索引之类的东西,但分配有效。我的情况比较复杂:
我想根据另一个字段的标准设置特定字段的掩码,因此我需要获取该字段,应用布尔索引并获取掩码。有3个!= 6 次这样做。
准备:
In [83]: M = ma.MaskedArray(random.random(400).view("f8,f8,f8,f8")).reshape(10, 10)
In [84]: crit = M[:, 4]["f2"] > 0.5
字段 - 索引 - 掩码(失败):
In [85]: M["f3"][crit, 3].mask = True In [86]: print(M["f3"][crit, 3].mask) [False False False False False]
索引 - 字段 - 掩码(失败):
In [87]: M[crit, 3]["f3"].mask = True In [88]: print(M[crit, 3]["f3"].mask) [False False False False False]
索引 - 掩码 - 字段(失败):
In [94]: M[crit, 3].mask["f3"] = True In [95]: print(M[crit, 3].mask["f3"]) [False False False False False]
掩码 - 索引 - 字段(失败):
In [101]: M.mask[crit, 3]["f3"] = True In [102]: print(M.mask[crit, 3]["f3"]) [False False False False False]
字段 - 掩码 - 索引(成功):
In [103]: M["f3"].mask[crit, 3] = True In [104]: print(M["f3"].mask[crit, 3]) [ True True True True True] # set back to False so I can try method #6 In [105]: M["f3"].mask[crit, 3] = False In [106]: print(M["f3"].mask[crit, 3]) [False False False False False]
掩码 - 字段 - 索引(成功):
In [107]: M.mask["f3"][crit, 3] = True In [108]: print(M.mask["f3"][crit, 3]) [ True True True True True]
所以,看起来索引必须排在最后。