【Python】Numpy配列の次元変換でよく使う関数のまとめ

Numpy配列の作成と要素の確認

import numpy as np

#Numpy配列の作成
sample = np.arange(0, 100, 0.1)
sample

<実行結果>

array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1. ,
        1.1,  1.2,  1.3,  1.4,  1.5,  1.6,  1.7,  1.8,  1.9,  2. ,  2.1,
        2.2,  2.3,  2.4,  2.5,  2.6,  2.7,  2.8,  2.9,  3. ,  3.1,  3.2,
        3.3,  3.4,  3.5,  3.6,  3.7,  3.8,  3.9,  4. ,  4.1,  4.2,  4.3,
        4.4,  4.5,  4.6,  4.7,  4.8,  4.9,  5. ,  5.1,  5.2,  5.3,  5.4,

#.shapeでnumpy配列の次元数を確認する
sample.shape

np.shapeでsampleの次元数を確認すると(1000,)と返ってくると思います。これはsampleというNumpy配列が1000個の要素を含んだ1次元配列であるということを示しています。

1次元のNumpy配列を2次元のNumpy配列に変換する

次はこの1次元のNumpy配列であるsampleを2次元のNumpy配列に変換します。

#Numpy配列を1次元から2次元に変換する
sample.reshape(2,500)

<実行結果>

array([[ 0. ,  0.1],
       [ 0.2,  0.3],
       [ 0.4,  0.5],
       [ 0.6,  0.7],
       [ 0.8,  0.9],
       [ 1. ,  1.1],
       [ 1.2,  1.3],

Numpy配列の次元変換でnp.reshape()を使う際の注意点としては変換前と変換後の要素数があっているかです。↑のコードは(1000,1)の1次元行列を(500,2)の2次元配列に変換しています。1×1000と500×2はどちらも1000で要素数が同じなので変換ができます。

また行列の要素数がすごく大きくて一々頭の中で割り算して引数を指定するのはめんどくさい場合は引数を[,-1]にすることで自動的にNumpy側が要素数を合わせてくれます。

#どちらかの引数を-1にすると勝手に要素数を合わせてくれる
sample.reshape(-1,2)

<実行結果>

array([[ 0. ,  0.1],
       [ 0.2,  0.3],
       [ 0.4,  0.5],
       [ 0.6,  0.7],

もちろん-1で設定できるのはもう片方の要素数が割り切れる勢数になるときだけです。

#引数は全要素数割り切れるものしか無理!
sample.reshape(-1,3)


ValueError
: cannot reshape array of size 1000 into shape (3)

3次元のNumpy配列に変換する

#3次元のNumpy配列に変換する
sample.reshape(-1,1,2)

<実行結果>

array([[[ 0. ,  0.1]],

       [[ 0.2,  0.3]],

       [[ 0.4,  0.5]],

返ってきた結果を見ると、array([[[…になっており、3次元のNumpy配列に変換されていることが分かります。

2次元または3次元のNumpy配列を1次元に変換する

多次元のNumpy配列を1次元に変換する場合はnp.flatten()を使用します。

#reshapeで多次元配列を作成する
sample2=sample.reshape(-1,1,2)

#flattenで1次元配列に変換する
sample2.flatten()

自分は基本的にnp.reshape()を使っているのですが、何万×何万の行列だと要素数があっているはずなのに、次元削減の場合だとReshapeがうまく変換できないときがある気がするので、そういうときはnp.flatten()を使っています。

終わり

以上がNumpyでの次元変換の基本的な関数です。とりあえず以下の3つが使えれば問題ないです。

np.shape()

np.reshape()

np.flatten()

Numpyの次元数は機械学習やディープラーニングにおいて学習データの前処理で意識する場面が多いので慣れておきましょう。「現場で使える!NumPyデータ処理入門 」は実務でよく使う関数をまとめてくれているので、Numpyの参考書を何か1冊持っておきたい場合にはオススメです。

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。



それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」「エンジニアとして若いうちから高収入を得たい」という気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

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

フォローする