【図解あり】Pythonの3次元配列で苦しんでる方へ | 時系列の天気予報とnumpy.zerosを例に解説

私は、Udemyの機械学習講座の「自然言語処理」、AIジョブカレの機械学習講座を受講しています。

2つの講座で、3次元配列を扱うことになったのですが、直感的なイメージができず頭の中が混乱してしまいました。

どのように3次元配列をどのように理解すればよいか、自分なりの答えがでたので記事にします!

どんなときに3次元配列を使うの?

3次元配列が必要になるケース

・機械学習のRNNなどの時系列で処理するもの

・天気予報など時間の流れを考慮して予測。

・自然言語処理の分野において文章を学習させる

まずは2次元配列をイメージしてみる

2次元配列ならば、CSVファイルやエクセルファイルのように行と列(つまり行列)にデータがあるものとイメージできます。

都市 気温 降水量 風向 風速 湿度 気圧
東京 25.3 0 南南西 2.4 89 1009.4
埼玉 25.2 0 西南西 1.2 89 1009.4
神奈川 24.6 0 南南東 0.4 97 1009.4
千葉 24.8 0 北西 2.3 98 1010.1
茨城 24.3 0 北西 1.3 100 1010.2
山梨 25 0 北西 1.6 99 1010.7
群馬 26 0 西北西 1.4 93 1011.3

2次元配列のイメージ

2次元配列のイメージは、以下のようなものです。

(行,列)

[[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]]

3次元配列をイメージするとなると・・・

3次元配列の話になると途端に混乱してきます。

いきなり、イメージしようとしてもできるものではありません。

3次元配列の直感的なイメージとしては、行列が複数あるものと理解すると良いかもしれません。

エクセルの表であれば、シートが複数あるイメージです。

つまり1シートに行列でデータが入力されていて、それが日付ごとに複数のシートに記載されているイメージです。

3次元配列は、以下のようなデータの入り方がイメージできます。

■一般的な考え方

(奥行き,行,列)

■エクセルを例に取ると

(シート, 行,列)

3次元配列を天気予報のアメダスの例で解説

アメダスを例に3次元配列を解説します。

■アメダスのデータのもたせ方

奥行き・・・時系列(観測した時間)

行・・・都市の羅列

列・・・気温、降水量、風向きなどの観測項目

アメダスの例だと、奥行きの部分を天気を観測した時間、行を場所(都市名)ごと、列をそれぞれの項目とします。つまり、時間ごとに行列になったデータがあるイメージです。

■時系列のイメージ

3次元配列をPythonのnumpy.zeros関数で解説

せっかくなのでPythonで3次元配列を扱ってみます。

多次元配列を生成する際、zeros関数をよく使います。

numpy.zerosのマニュアル

https://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html

簡単なソースコードを書いてみます。

import numpy as np
#奥行き(時系列)3, 5行、7列の3次元配列を記載する
data = np.zeros((3,5,7), dtype=np.int)

dataの出力結果は以下の通りで、

5行7列の行列が3つ(奥行き、または時系列)あることを確認できるかと思います。

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, 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]]])

3次元配列をつかう1つのケースは、RNNを使って時系列データの処理をする場合です。

私は、kerasでSimpleRNNを使ってみたのですが、SimpleRNNにデータを渡す際に、データの構造を3次元配列にする必要がありました。kerasやSimpleRNNについては、別の機会に解説したいと思います。

まとめ

3次元配列をイメージするのは、直感的にイメージするのは難しいかもしれませんが時系列で考えると比較的簡単にイメージできるかと思います。

評判も見えるPGスクール検索・比較表

どのプログラミングスクールがいいんだろう?
そんな疑問をお持ちの方に、評判も見えるプログラミングスクール検索・一括比較サービスをリリースしました。

条件を指定することにより、気になるプログラミングスクールを一発で比較できます。
きっと、条件にあったスクールが見つかるかと思います!
詳細は、以下の画像をクリック!

プログラミングスクール検索・比較のペン太ブル
スポンサーリンク
PR




PR




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
PR