Numpy配列の形状を変形させるreshapeとresizeの使い方と違いについて

Numpy

 Numpy配列を変形させる関数がreshapeとresizeです.この関数を使うと1次配列から2次配列へ変形できます.本記事ではこれら関数の使い方と2つの違いについて解説しております.

 スポンサーリンク

スポンサーリンク

reshape関数

 reshape関数を使うとNumpyで作成した配列を変形させることができます.例えば1次元配列を2次元配列に変形させたり,この逆もできるようになります.

reshape関数の書式

numpy.reshape(a,newshape,order=”C”) 
ndarray.reshape(newshape,order=”C”)
a    :変形元の配列 
newshape:新しい配列を設定.元の配列の要素数と変形後の要素数を同じにする必要があります


order  :指定した方法でインデックスを読み,変形後のデータの並び順を指定します.”C”はC言語,”F”はFortranのような処理になります.デフォルトは”C”です.

・1次配列を2次元配列に変形してみます.

[IN]

import numpy as np
a=np.arange(1, 10) 
print("元の配列 \n",a)
b=np.reshape(a,(3,3))
print("変形後の配列 \n",b)

[OUT]

元の配列 
 [1 2 3 4 5 6 7 8 9]
変形後の配列 
 [[1 2 3]
 [4 5 6]
 [7 8 9]]

1次元配列から2次元配列に変更できました.

reshape関数は元になる配列情報を参照して配列を変形しています.どちらかの配列内の要素値が変わると互いに影響しあうので注意が必要です.
・配列aをreshapeで変形し配列bとします.この後に配列aの要素の値を変えてみて,配列bの値がどのようになるか確認します.

[IN]

import numpy as np
a=np.arange(1, 10) 
print("・元の配列 \n",a)
b=np.reshape(a,(3,3))
print("・変形後の配列 \n",b)

a[0:9]=99          #元の配列の値を変更
print("\n・元の配列の値を変更 \n",a)
print("・変形後の配列の値を確認する\n",b)

[OUT]

・元の配列 
 [1 2 3 4 5 6 7 8 9]
・変形後の配列 
 [[1 2 3]
 [4 5 6]
 [7 8 9]]
・元の配列の値を変更 
 [99 99 99 99 99 99 99 99 99]
・変形後の配列の値を確認する
 [[99 99 99]
 [99 99 99]
 [99 99 99]]

配列bの要素値は,配列aと同じになりました.

ndarray.resize関数

 resize関数は元の配列を変形して新しい配列を作成します.reshapeは元配列と変形後の配列の要素数が同じである必要がありますが,resizeは変形後の要素が異なっていても配列を強制的に作成します.

[IN]

import numpy as np
a=np.arange(1, 10) 
print("・元の配列 \n",a)
b=np.resize(a,(3,3))
print("・変形後の配列 \n",b)

a[0:9]=99          #元の配列の値を変更
print("\n・元の配列の値を変更 \n",a)
print("・変形後の配列の値を確認する\n",b)

[OUT]

・元の配列 
 [1 2 3 4 5 6 7 8 9]
・変形後の配列 
 [[1 2 3]
 [4 5 6]
 [7 8 9]]

・元の配列の値を変更 
 [99 99 99 99 99 99 99 99 99]
・変形後の配列の値を確認する
 [[1 2 3]
 [4 5 6]
 [7 8 9]]

元配列の数値が変わっても,resizeで変形した場合の配列内の値は変わらない事が確認できました.

下記にeshape関数とresize関数について表にしました.

項目reshaperesize
配列の変形
元配列と違う
要素数で変形が可能
×
元配列と変形後の配列で要素値
が相互に繋がっている.
×
引数にorderがある×

 reshape関数とresize関数についてどちらも配列を変形させるものですが,本記事で使い方と違いが理解が深まったのではないでしょうか.

トップページへ戻る

 スポンサーリンク

コメント

タイトルとURLをコピーしました