【Python】 Numpyで配列を操作する方法 備忘録 |
Your 3D
プログラミング
ZBrush
Unity
サイトマップ
プロフィール
お問い合わせ
プライバシーポリシー
【Python】 Numpyで配列を操作する方法 備忘録
プログラミング
Twitter Facebook はてブ Pocket LINE コピー
2020.11.01 2019.05.04
この記事は約5分で読めます。
Pythonの数値演算ライブラリ、Numpyについて知っておきたい機能をまとめていきたいと思います。
Numpyは、画像処理やデータ分析する際に、ほぼ必須となるライブラリなので、使用頻度の高い機能については最低限覚えておきたいですよね。
この記事は、自分が何度も調べたり、忘れてしまったりすることを重点的にまとめました。いわゆる備忘録ってやつです。
Numpyの操作については、レファレンスを読めばわかることなのですが、いちいち探すのが手間なので記事としてすぐに見れるようにしておきたいと思った次第です。
わからないことが解決できて、お役に立てたら幸いです。
スポンサーリンク
目次
■Numpyで配列を操作する方法
・配列の形を調べる
・配列の形を変換
1.transpose(変換したい配列)
2.reshape(変換したい配列, 変換後の形状)
・新たな列を追加
・正規化・標準化
min-max normalization 最大1、最小値0の正規化
z-score normalization, standardization 平均0、分散1の標準化
■まとめ
■Numpyで配列を操作する方法
私がよく使う、よく調べる配列の操作方法についてまとめました。
流れとしては、「やりたいこと」→「使うメソッド(具体的に)」→「コードの解説」のように書いていきます。
そのため、調べたいことがある場合は少し上に戻って目次の部分で検索していただけるとすぐに見つけられると思います。
なお、メソッド、コードの説明時には、Numpyを以下のようにインポートしたことを前提にして説明しますので、あらかじめご了承ください。
Python
import numpy as np
1
import numpy as np
・配列の形を調べる
shape(調べたい配列)
Python
A = [[[1,2,3],[4,5,6]], [[7,8,9], [10,11,12]]] #shape 全体の形がわかる print(np.shape(A)) #ndim 次元 print(np.ndim(A))
1
2
3
4
5
6
7
A = [[[1,2,3],[4,5,6]], [[7,8,9], [10,11,12]]]
#shape 全体の形がわかる
print(np.shape(A))
#ndim 次元
print(np.ndim(A))
結果
$ (2, 2, 3) /shape 外側の[]から順に並んでいる $ 3 /ndim
1
2
$ (2, 2, 3) /shape 外側の[]から順に並んでいる
$ 3 /ndim
shapeメソッドを使えばNumpy配列の形を調べることができます。出力は外側の[]から内側の[]の順に、それぞれの要素数が並びます。
緑[]の要素数が2、オレンジ[]の要素数が2、青[]の要素数が3となっていますね。ちなみに画像配列をこの例に当てはめると、緑が高さ、オレンジが幅、青がRGBの数値になります。
[[[1,2,3],[4,5,6]], [[7,8,9], [10,11,12]]]
また、ndimで配列の次元数を調べられます。Aの次元は[]が三重となっているので3次元配列です。
・配列の形を変換
1.transpose(変換したい配列)
Python
A = [[[1,2,3],[4,5,6]], [[7,8,9], [10,11,12]]] #転置 print(np.transpose(A))
1
2
3
4
A = [[[1,2,3],[4,5,6]], [[7,8,9], [10,11,12]]]
#転置
print(np.transpose(A))
結果
$ [[[ 1 7] [ 4 10]] [[ 2 8] [ 5 11]] [[ 3 9] [ 6 12]]]
1
2
3
4
5
6
7
8
$ [[[ 1 7]
[ 4 10]]
[[ 2 8]
[ 5 11]]
[[ 3 9]
[ 6 12]]]
配列の順序を入れ替えます。転置です。右に1つずつずれて、(2,2,3)→(3,2,2)の配列となっています。
2.reshape(変換したい配列, 変換後の形状)
Python
A = [[[1,2,3],[4,5,6]], [[7,8,9], [10,11,12]]] #reshape 変形 reshape_A = np.reshape(A, (4, 3)) print(reshape_A)
1
2
3
4
5
A = [[[1,2,3],[4,5,6]], [[7,8,9], [10,11,12]]]
#reshape 変形
reshape_A = np.reshape(A, (4, 3))
print(reshape_A)
結果
S [[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]]
1
2
3
4
S [[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
配列の形を変更できます。上のように3次元配列→2次元配列に変換もできます。
変形の際は要素数の合計を変換前後で合わせる必要があります。例だと変換前は(2×2×3=12)、変換後は(4×3=12)ですね。
・新たな列を追加
np.append(受け手の配列, 追加したい配列, axis=追加したい軸)
Python
A = [[[1,2,3],[4,5,6]], [[7,8,9], [10,11,12]]] #append 追加 append_A = np.append(A, [[[10,20,30],[40,50,60]], [[70,80,90],[100,110,120]]], axis=0) print(append_A)
1
2
3
4
5
A = [[[1,2,3],[4,5,6]], [[7,8,9], [10,11,12]]]
#append 追加
append_A = np.append(A, [[[10,20,30],[40,50,60]], [[70,80,90],[100,110,120]]], axis=0)
print(append_A)
結果
[[[ 1 2 3] [ 4 5 6]] [[ 7 8 9] [ 10 11 12]] [[ 10 20 30] [ 40 50 60]] [[ 70 80 90] [100 110 120]]]
1
2
3
4
5
6
7
8
9
10
11
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[ 10 11 12]]
[[ 10 20 30]
[ 40 50 60]]
[[ 70 80 90]
[100 110 120]]]
要素数、形状を受けての配列と追加したい配列で合わせれば新たな配列を追加できる。
例では、Aとまったく同じ形状の配列をAに追加しています。
・正規化・標準化
Numpyには正規化を行ってくれるメソッドはありませんでした。
しかし、Max,min,stdなどは算出するメソッドがあるので、そちらを使って自分で関数化することも可能です。
min-max normalization 最大1、最小値0の正規化
Python
A = [[[1,2,3],[4,5,6]], [[7,8,9], [10,11,12]]] def normalize(x): x_max = np.max(x) x_min = np.min(x) y = (x - x_min) / (x_max - x_min) return y print(normalize(A))
1
2
3
4
5
6
7
8
9
10
A = [[[1,2,3],[4,5,6]], [[7,8,9], [10,11,12]]]
def normalize(x):
x_max = np.max(x)
x_min = np.min(x)
y = (x - x_min) / (x_max - x_min)
return y
print(normalize(A))
結果
$[[[0. 0.09090909 0.18181818] [0.27272727 0.36363636 0.45454545]] [[0.54545455 0.63636364 0.72727273] [0.81818182 0.90909091 1. ]]]
1
2
3
4
5
$[[[0. 0.09090909 0.18181818]
[0.27272727 0.36363636 0.45454545]]
[[0.54545455 0.63636364 0.72727273]
[0.81818182 0.90909091 1. ]]]
データの値を、最小0最大1の範囲に正規化します。上の例だとわかりやすいですね。一番初めの1が最小なので0、一番最後の12が最大なので1として出力されています。
z-score normalization, standardization 平均0、分散1の標準化
Python
A = [[[1,2,3],[4,5,6]], [[7,8,9], [10,11,12]]] def nomalize(x): x_mean = np.mean(x) x_std = np.std(x) y = (x-x_mean) / x_std return y print(nomalize(A))
1
2
3
4
5
6
7
8
9
10
A = [[[1,2,3],[4,5,6]], [[7,8,9], [10,11,12]]]
def nomalize(x):
x_mean = np.mean(x)
x_std = np.std(x)
y = (x-x_mean) / x_std
return y
print(nomalize(A))
結果
$ [[[-1.59325501 -1.30357228 -1.01388955] [-0.72420682 -0.43452409 -0.14484136]] [[ 0.14484136 0.43452409 0.72420682] [ 1.01388955 1.30357228 1.59325501]]]
1
2
3
4
5
$ [[[-1.59325501 -1.30357228 -1.01388955]
[-0.72420682 -0.43452409 -0.14484136]]
[[ 0.14484136 0.43452409 0.72420682]
[ 1.01388955 1.30357228 1.59325501]]]
配列のデータの分布の平均が0、分散が1となるようにデータが変換されます。
正規化・標準化の使い分けについては、以下の記事が参考になると思います。
https://qiita.com/ttskng/items/2a33c1ca925e4501e609
スポンサーリンク
■まとめ
今回はここまでとなります。
まとめた内容はPythonでデータ処理を行う際は必須の内容なので、覚えておくと後々楽になると思います。
以降、調べた内容を適宜追加していく予定です。
なお、もっと詳しく知りたい方は以下リンクのNumpyリファレンスを読んでみてください。
https://www.numpy.org/devdocs/reference/
今回まとめた内容は、私が機械学習を学ぶ上で調べた事柄です。ゼロから作るDeepLearningという本を読みつつ自分で調べていました。
内容がしっかりしていて初心者にも読みやすいです。機械学習に興味がある方におすすめですよ！
以上になります。最後まで読んでいただきありがとうございました。
プログラミング
機械学習
スポンサーリンク
シェアする
Twitter Facebook はてブ Pocket LINE コピー
ゆあーさんをフォローする
ゆあーさん
Your 3D
関連記事
スポンサーリンク
スポンサーリンク
ホーム
プログラミング
人気の記事
Pythonで画像処理 画像配列とRGBを理解しよう！
【Python】Seleniumでスクレイピング 待機処理のまとめ
Pythonでツイートを取得する方法【Twitter分析】
PythonとMeCabで文章を解析する方法【頻出度カウント】
初心者がPythonで顔認識してみた【カスケードファイル】
機械学習用の顔画像データセットのつくり方【Python】
【Python】CSV形式でデータを扱う方法
Python listにappend extendで追加する方法
Mecabで形態素解析：品詞分解する方法【Python】
DjangoとMySQLの連携方法【開発環境のつくり方】
スポンサーリンク
人気の記事
Pythonで画像処理 画像配列とRGBを理解しよう！
【Python】Seleniumでスクレイピング 待機処理のまとめ
Pythonでツイートを取得する方法【Twitter分析】
PythonとMeCabで文章を解析する方法【頻出度カウント】
初心者がPythonで顔認識してみた【カスケードファイル】
機械学習用の顔画像データセットのつくり方【Python】
【Python】CSV形式でデータを扱う方法
Python listにappend extendで追加する方法
Your 3D
Copyright © 2018-2021 Your 3D All Rights Reserved.
メニュー
プログラミング
ZBrush
Unity
サイトマップ
プロフィール
お問い合わせ
プライバシーポリシー
ホーム
検索
トップ
サイドバー
スポンサーリンク
人気の記事
Pythonで画像処理 画像配列とRGBを理解しよう！
【Python】Seleniumでスクレイピング 待機処理のまとめ
Pythonでツイートを取得する方法【Twitter分析】
PythonとMeCabで文章を解析する方法【頻出度カウント】
初心者がPythonで顔認識してみた【カスケードファイル】
機械学習用の顔画像データセットのつくり方【Python】
【Python】CSV形式でデータを扱う方法
Python listにappend extendで追加する方法
タイトルとURLをコピーしました
