たとえば、形状が (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.]])
これにより、最初の要素が 0 未満の行に対してのみ計算を実行できます (この例では、これらの行の他の要素も負であることが偶然ですが、最初の要素のみの場合をテストしました)。要素は負で、他の要素は正です)。この時点でいくつか質問があります。
1) 計算を実行する最初の列を除くすべての列をカバーするために追加のマスクを追加する必要があります (例を具体的にするために: その要素がゼロより小さい各行の最初の要素に 1000 を追加したい) ?
2) アレイのマスキングは永続的ですか? アンマスク方法はありますか?
3) これは、この種の計算を実行する最も簡単な方法ですか?
任意の提案をいただければ幸いです。ありがとう!