スライドショー

【NumPy入門 np.ndarray.shape】配列の形状を確認するshapeの使い方

こんにちは!インストラクターのフクロウです!

NumPyの配列は様々な計算で使うことができますが、複雑な計算になると配列の形状が分かりづらくなりますね。行列計算(特に内積や外積)では配列の形状が非常に大切なので、これを確認する方法はしっかり覚えておきたいところです。

さて、np.arrayには簡単に配列の形状を確認する事ができるインスタンス変数shapeがあります。このshapeは、配列の形を確認するだけでなく、実はnp.reshapeと似た動きをさせることもできます。

この記事でshapeについて学んで、NumPyを使った行列計算をスムーズにできるようになりましょう。

shapeの使い方

※この記事のコードは、jupyter notebookjuputer labを使って書かれています。
コードを試すときは是非これらを使ってみてください。

# コード In [1]:
import numpy as np

shapeで配列の形状を取得する

np.array(np.ndarray)のshape属性を使うと、配列の形状を確認することができます。

サンプル配列を作って試してみましょう。

# コード In [2]:
a = np.arange(0,20)
b = np.reshape(a, (4,5))
c = np.reshape(a, (2,2,5))
# コード In [3]:
a
# 出力結果 Out [3]:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19])
# コード In [4]:
b
# 出力結果 Out [4]:
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
# コード In [5]:
c
# 出力結果 Out [5]:
array([[[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9]],

       [[10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19]]])

今回作った配列の型を確認しましょう。Pythonではtype関数でオブジェクトの型が確認できました。

# コード In [6]:
print(type(a))
print(type(b))
print(type(c))
# 出力結果 [6]:
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>

shapeのようなインスタンス変数は、メソッドのように「インスタンス.変数名」としてアクセスすると中身が確認できます。

# コード In [7]:
print(a.shape)
print(b.shape)
print(c.shape)
# 出力結果 [7]:
(20,)
(4, 5)
(2, 2, 5)

reshapeのように配列の形を変える

shapeを使うことで、reshapeと同様に配列の形を変えることができます。reshapeについてはこちらの記事を御覧ください。

【NumPy入門 np.reshape】配列の形を変える方法 flattenの代用にも!
更新日 : 2019年8月28日

使い方は、「インスタンス.shape = (変更したい配列の形状)」です。

# コード In [8]:
a.shape = (10,2)
a
# 出力結果 Out [8]:
array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [10, 11],
       [12, 13],
       [14, 15],
       [16, 17],
       [18, 19]])
# コード In [9]:
a.shape
# 出力結果 Out [9]:
(10, 2)

ただし、reshapeと同様に元配列の要素素に合わない形を指定するとエラーになります。注意しましょう。

配列の次元を取得するndimの使い方

shapeに似た機能をもつndimについても紹介します。ndimを使うことで、配列の次元数を確認することができます。

# コード In [11]:
print(a.ndim)
print(b.ndim)
print(c.ndim)
# 出力結果 [11]:
2
2
3

まとめ

この記事では、NumPyのndarrayの配列の形を確認する機能ndarray.shapeについて解説しました。

内積や外積の計算がたくさん出てくる機械学習の実装では、非常にお世話になる機能です。是非覚えて使いこなしてくださいね!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

フクロウ

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説