配列があり、別の配列を使用した分類に基づいて要素を変更したいと考えています。
つまり、1 つの配列をインポートし、cell[i,j] の値が特定の制限内 (たとえば 1 ~ 8) の場合は、secondArray[i,j] に 0.3 を掛けて、結果を出力配列に入れます。場所 [i,j]
私はこれを行うコードをいくつか持っています (そして、おそらく私が意味することをもう少し明確に説明しています) が、「非常に」長い時間がかかり (私の配列は約 1000*1000 要素であるため)、より効率的な解決策があるかどうか疑問に思いました。
現在私は持っています:
..
import numpy as np
def Factor_AM(cell):
if cell < 1 return 0.2;
elif cell < 8: return 0.3;
else: return 0.5;
mat = np.array(..some code to get an array from an external source..) //size 1000*1000
mat_out_1 = np.zeros_like(mat)
mat_out_1 = np.zeros_like(mat)
mat_ClassifyMe = np.array(..some code to import another 1000*1000 array with values in)
for index, x in np.ndenumerate(mat):
mat_out_1[index] = Factor_AM(x) * mat_ClassifyMe[index]
mat_out_2[index] = (1-Factor_AM(x)) * mat_ClassifyMe[index]
..some code to output mat_out_1 and mat_out_2
np.where および np.argwhere 関数に関するいくつかのドキュメントを見ましたが、これは有望に見えますが、複数のテストがある場合 (上記のコードでは 3 つですが、実際には 12 あります)、それなしでは方法を考えられません。非常に醜いネストされたステートメントを作成します。
これを行う別の方法はありますか、それとも Python と同じくらい効率的ですか?