【NumPy】マスクした配列の要素を別の配列に代入する

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【NumPy】マスクした配列の要素を別の配列に代入する

2024-2-8 | ,

PythonでNumPyを使ってマスクした配列の要素を別の配列に代入したい!

概要

今回の記事では、PythonでNumPyを使ってマスクした配列の要素を別の配列に代入する手順を掲載する。

仕様書

環境

  • Python 3.11.5

手順書

下記のような感じでsrcdistmaskという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を使って実装せずに済んでめちゃ楽ちん。