例如,假设我有一个形状为 (10,10) 的 Numpy nd.array:
import numpy as np
a = np.linspace(-1,1,100).reshape(10,10)
当且仅当第一个元素小于零时,我想对每行的第一个元素执行计算。为此,我一直在考虑使用屏蔽数组:
a = np.ma.MaskedArray(a,mask=(np.ones_like(a)*(a[:,0]<0)).T)
>>> (np.ones_like(a)*(a[:,0]<0)).T
array([[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
这将允许我仅对第一个元素小于零的行执行计算(碰巧在这个例子中这些行的其他元素也是负数,但我已经测试了只有第一个元素的情况元素为负,其他为正)。在这一点上我有几个问题:
1)我是否应该添加一个额外的掩码来覆盖除第一个列之外的所有列以执行我的计算(为了使示例具体:我想将 1000 添加到该元素小于零的每行的第一个元素)?
2) 屏蔽阵列是永久性的吗?有没有取消屏蔽的方法?
3)这是执行此类计算的最简单方法吗?
任何建议,将不胜感激。谢谢!