A = np.array([[1,2,3], [4,5,6], [7,8,0]])
for x in A[1,:]:
if x < failure_tolerance:
x = 0
これは明らかに書き込み不能で起こっていることがありますが、私はそれを取り戻すことができません。NumPy配列の行/列をループして値を変更します。
A = np.array([[1,2,3], [4,5,6], [7,8,0]])
for x in A[1,:]:
if x < failure_tolerance:
x = 0
これは明らかに書き込み不能で起こっていることがありますが、私はそれを取り戻すことができません。NumPy配列の行/列をループして値を変更します。
ここではx
のみが変更されています。 x
はではありません。は配列内の特定のセルを参照し、配列内の要素への参照を保持しますが、要素を保持するセルは保持しません。
は、それでも通常、1つは、あなたが一括に行列に計算を実行したい場合numpyの構造を使用しています。ここでは
A = np.array([[1,2,3], [4,5,6], [7,8,0]])
A[1,A[1,:] < failure_tolerance] = 0
A[1,:] < failure_tolerance
failure_tolerance
未満の値のマスクを構築します。次に、0
をA
のすべての値に設定します。
(failure_tolerance = 5
有する)例えば:
>>> failure_tolerance = 5
>>> A[1,A[1,:] < failure_tolerance] = 0
>>> A
array([[1, 2, 3],
[0, 5, 6],
[7, 8, 0]])
それが5
よりも小さいので、第二列(4
)の最初の要素は今0
で置き換えられている見ることができるように。
通常、numpyで呼び出しを実行すると、numpyはPythonでこれらの呼び出しを行いませんが、Cで高性能のデータ構造とアルゴリズムを使用するため、より高速に実行されます。(非常に)小さな行列の場合、 (呼び出しオーバヘッドのためにnumpyが長くかかる可能性がありますが)巨大な行列を扱う場合、numpyはPythonで書かれた解決策よりも明らかに優れています。
さらに、この構文は非常に宣言的です。訓練されていない開発者はすぐにfailure_tolerance
より小さい値を設定することを理解します。
EDIT:
あなたが複数の条件をしたい場合は、あなたは論理として論理的かと&
として|
を使用してすることができます。例えば:
A = np.array([[1,2,3], [4,5,6], [7,8,0]])
A[1,(A[1,:] < failure_tolerance)& (A[1,:] > at_least_value)] = 0
これは、これらの値は、at_least_value
とfailure_tolerance
の間で所定の0
にA
の第行のすべての値を設定します。
複数の条件を組み込む方法はありますか?好きなとき:要素がfailure_toleranceより小さく、at_least_valueより大きい場合に要素を変更します –
@JoschKraus:編集を参照してください。 –
A [dst、A [dst、:]
エラーがありますか? –
@ChandaKorat:明らかに、 'A'では何も変わらないので、コードは効果がありません。 –