PythonでNumPyを使ってマスクした配列の要素を別の配列に代入したい!
概要
今回の記事では、PythonでNumPyを使ってマスクした配列の要素を別の配列に代入する手順を掲載する。
仕様書
環境
- Python 3.11.5
手順書
下記のような感じでsrcとdistとmaskという2次元配列があって、maskで1となってる位置のdistの要素をsrcの要素に代入したい。
src = np.array([
[1,2,3],
[4,5,6],
[7,8,9],
])
dist = np.array([
[11,22,33],
[44,55,66],
[77,88,99],
])
mask = np.array([
[1,0,1],
[0,1,0],
[1,0,1],
])
こんな感じで出力したい。
[[11 2 33]
[ 4 55 6]
[77 8 99]]
実際に動くコードはこんな感じ。
import numpy as np
import copy
src = np.array([
[1,2,3],
[4,5,6],
[7,8,9],
])
dist = np.array([
[11,22,33],
[44,55,66],
[77,88,99],
])
mask = np.array([
[1,0,1],
[0,1,0],
[1,0,1],
])
result = copy.deepcopy(src)
result[mask == 1] = dist[mask == 1]
print(result)
numpy.arrayでは[]の中で条件指定ができる。[mask == 1]は配列maskの値が1になってる位置の要素を指定してる。
今回はsrcの値を変更したくないので、copy.deepcopyを使ってコピーの配列を作ってその配列を処理した。
まとめ(感想文)
NumPyってめちゃ便利だと思う今日この頃。
forを使って実装せずに済んでめちゃ楽ちん。
