はじめに
「numpyでそんなことができたのか。。。」
ある日バイト中に社員の方からコードを見てもらってるときに教えてもらったことが、僕の中であまりにも感動してしまったので、思わず記事にしてしまいました。
研究でしかpythonを使わず、numpy
もそんなに使ってないとはいえ、少しは使えるようになってるかなと思ってた矢先の出来事でした。
python playerの人は知ってる方も多いかもしれませんが、興味本位で見てくだされば幸いです。
np.zeros
np.zeros
とかnp.ones
とかnp.empty
で初期化した配列を作れるのは、周知の事実ですがサイトとかみると
1次元配列・2次元配列でしか紹介されてないですよね。
こんな感じです。↓
import numpy as np
a = np.ones(5) #要素が5個の一次元配列
b = np.ones((4, 5)) #4×5の2次元配列
それでは、配列の中に配列を入れる場合にはどのように初期化するのでしょうか?
例えば、2次元配列の要素に2次元の要素を入れたいときとかです。(この場合は次元的には3次元になります。)
こんな感じの配列です。↓
[[[1,1],
[2,2]],
[[3,3],
[4,4]]]
では、解法と行きましょう。(出力結果が見やすいように、小さい配列にしてます)
array = np.zeros((2, 2, 4, 4), order="C")
出力結果(この場合には次元は4次元になります。)
array([[[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]],
[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]]],
[[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]],
[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]]]])
無事2×2
の配列の要素に4×4
の配列を定義することができました!
ちなみに、np.zeros
よりnp.empty
の方が処理速度は早いです。
完
終わりに
今回はnumpyの感動した出来事をまとめてみました。
「numpy...貴様そんなことができたのか!」
と僕の知識のなさをnumpyのせいにして終わりにしたいと思います。
誰かのお役に立てれば幸いです。