配列の形状を変化させたいときは、numpy.reshap()が便利です。
本記事ではnumpy.reshape()の使い方を紹介します。
ndarray.reshape()やnumpy.resize()との違いについても分かりやすく教えます。
numpyを使うと配列の操作が簡単に行なえます。
numpy.reshape()とは
numpy.reshape()とはnumpy配列の形状を変化させる関数です。
配列の形状変化とは、例えば1×6の配列を2×3へ変化させるというものです。
実際にコードを書きながら、numpy.reshape()の使い方を覚えましょう。
本記事のコードは全てグーグルコラボラトリーで記述・動作を確認しています。
グーグルコラボラトリーとはgoogleアカウントを持っている人であれば、誰でも・無料で使うことができるpythonの対話型実行環境です。
データ分析に必要なライブラリが初めから搭載されていて、環境構築の必要がないため、python初心者には特にオススメです!
numpy.reshape()の使い方
それでは、numpy.reshape()の使い方を解説します。
最初にnumpyをインポートします。
numpyは一般的にnpと略してインポートします。
import numpy as np
配列を用意します。
今回は1×6の配列を準備しましょう。
a = [0, 1, 2, 3, 4, 5]
print(a)
出力:
[0, 1, 2, 3, 4, 5]
いよいよnumpy.reshape()で配列の形状を変更します。
numpy.reshape(変更したい配列, [変更後の形状])と記述します。
今回は2×3の配列へ変更させます。
np.reshape(a, (2, 3))
出力:
array([[0, 1],
[2, 3],
[4, 5]])
numpy.reshape()と-1
numpy.reshape()では-1を指定することが可能です。
-1を指定した場合、値は配列の長さと残りの次元から推測されます。
np.reshape(a, (3, -1))
出力:
array([[0, 1],
[2, 3],
[4, 5]])
numpy.reshapeの引数|order
numpry.reshape()にはorderという引数があります。
orderを指定することで、変換順序を指示することが可能です。
order=’C’がC言語方式でorder=’F’がFortran方式になります。order=’C’がデフォルトで設定されています。
b = np.reshape(a, (2, 3), order='C')
print("order=C:", b)
c = np.reshape(a, (2, 3), order='F')
print("order=F:", c)
出力:
order=C: [[0 1 2]
[3 4 5]]
order=F: [[0 2 4]
[1 3 5]]
ndarray.reshape()との違い
numpy.reshape()と同様の処理をする関数にndarray.reshape()があります。
ndarray.reshape()は基本的にnumpy.reshape()と同じですが、コードの書き方が広がります。
numpy.ndarray.reshape()|numpy公式
ndarrayとは、numpyで使うことのできる配列のデータ型です。
numpy.array()関数で配列を用意するとndarray型になります。
データ型の確認ができるtype()関数を使って、numpy.array()で用意した配列のデータ型を確認してみましょう。
d = np.array([0, 1, 2, 3, 4, 5])
print(d)
print(type(d))
出力:
[0 1 2 3 4 5]
<class ‘numpy.ndarray’>
またnumpy.array()は、すでに用意したリストをndarray型へ変更することも可能です。
f = np.array(a)
print(f)
print(type(f))
print(a)
print(type(a))
出力:
[0 1 2 3 4 5]
<class ‘numpy.ndarray’>
[0, 1, 2, 3, 4, 5]
<class ‘list’>
等間隔のndarray配列を用意したい場合、numpy.arage()を使う方法もあります。
e = np.arange(6)
print(e)
出力:
[0 1 2 3 4 5]
ndarray.reshape()を用いることで、 変更したい配列.reshape(変更後の形状)と記述できます。
d.reshape((2, 3))
出力:
array([[0, 1, 2],
[3, 4, 5]])
numpy.reshape()とnumpy.resize()の違い
numpy.resize()関数は指定した形状を持つ配列を生み出す関数です。
numpy.reshape()との違いは、元の配列よりも大きい配列を生み出すことができる点です。
もし新しい配列が元の配列より大きい場合、新しい配列は元の繰り返しコピーで満たされます。
np.resize(a, (3, 3))
出力:
array([[0, 1, 2],
[3, 4, 5],
[0, 1, 2]])
numpy.reshape()で元の配列より大きい配列へ変更しようとすると、エラーが出ます。
np.reshape(a, (3,3))
出力:
ValueError: cannot reshape array of size 6 into shape (3,3)
まとめ
今回は配列の形状を変更するnumpy.reshape()について紹介しました。
numpy.reshape()を使用する際は、ndarray型の配列を用意することをオススメします。
よくある質問
- NumPyのreshapeとResizeの違いは何ですか?
-
numpy.reshape()は元の配列より大きい配列にできませんが、numpy.resiza()は元の配列より大きい配列を生み出せます。
- Reshape(-1 1)とはどういう意味ですか?
-
numpy(-1, 1)と指定することで、元の形状と逆の形状へ変更できます。
例えば、1×6の配列は6×1の配列に変更されます。
e = np.arange(6) print("array_e:", e) g = e.reshape((-1, 1)) print("array_g:", g)
出力:
array_e: [0 1 2 3 4 5]
array_g: [[0]
[1]
[2]
[3]
[4]
[5]] - pythonについてもっと勉強したいです!
-
pythonを勉強するには書籍・動画・プログラミングスクールなどがあります。特にUdemyは有料ですが、pythonを勉強できる動画がたくさんあるのでおすすめです。
合わせて読みたい
コメント