Pythonの多次元配列に対し、配列でインデックスを指定して書き換える

Pythonのリストがややこしい…!

頭の体操です。

もんだい

Pythonで、以下のコマンドを実行するとどうなるでしょう?

import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([10, 11])

a[np.array([0, 2]), np.array([1, 0])] = b

print(a)

こたえ

[[ 1. 10. 3]
 [ 4.  5. 6]
 [11.  8. 9]]

これ、関連性わかります???

上記プログラムでは、多次元配列を、インデックス指定して、配列で置き換える、ということをやってます。

頭の固い私は、プログラムと、出力結果の関連性が最初全然分かりませんでした。

パッと分かる人は分かるんだろうなー。

かいせつ

分かってしまえば簡単なんですが、以下のように考えます。

まず、プログラムの1行1行を細かく分解、説明するとこんな感じ。

Pythonリスト書換えの解説01

ここで、それぞれの関わりを色分けすると分かりやすいです。

Pythonリスト書換えの解説02

こういうことかーって感じでした。

今まで色々な言語を触ってきましたが、このパターンの書き換えは頭になかったです。
まだまだ勉強が足りません…。

投稿者: Output48

中学生の時に初めてHTMLに触れてからホームページ制作を独学で始める。 ベンチャー企業の営業、大手企業のPG・SEを経て、独立。 現在はとある企業のCTOと、変な名前の会社の社長をしてる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください