如果我创建一个numpy数组,并创建另一个作为其选择性索引:
>>> x
array([[ 2, 3, 4],
[ 5, 6, 7],
[ 6, 7, 8],
[11, 12, 13]])
>>> nz
array([ True, True, False, True], dtype=bool)
然后直接使用nz
返回原始数组的视图:
>>> x[nz,:]
array([[ 2, 3, 4],
[ 5, 6, 7],
[11, 12, 13]])
>>> x[nz,:] += 2
>>> x
array([[ 4, 5, 6],
[ 7, 8, 9],
[ 6, 7, 8],
[13, 14, 15]])
但是,很自然地,一个作业会复制一份:
>>> v = x[nz,:]
对v的任何操作都在副本上,并且对原始数组没有影响。
有什么方法可以创建x[nz,:]
的命名视图,只是为了简化代码,还是可以传递代码,因此对命名视图的操作将仅影响x
的选定元素。 ?
答案 0 :(得分:1)
Numpy拥有masked_array
,这可能是您要查找的:
import numpy as np
x = np.asarray([[ 2, 3, 4],[ 5, 6, 7],[ 6, 7, 8],[11, 12, 13]])
nz = np.asarray([ True, True, False, True], dtype=bool)
mx = np.ma.masked_array(x, ~nz.repeat(3)) # True means masked, so "~" is needed
mx += 2
# x changed as well because it is the base of mx
print(x)
print(x is mx.base)