Numpy - reshape
np.reshapeがややこしいので試してみる。
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])print(a)b = np.reshape(a, (2, 3))print(b)[1 2 3 4 5 6] [[1 2 3] [4 5 6]]
配列aを、2行3列に変換しろ!といっております。試しに(2, 4)とか、(2, 2)とかでやってみましたがエラーになりました。ちょうどいい数字になってないとエラーになるようです。
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])print(a)b = np.reshape(a, (2, 3))print(b)b[0][0] = 10print(a)print(b)[1 2 3 4 5 6] [[1 2 3] [4 5 6]] [10 2 3 4 5 6] [[10 2 3] [ 4 5 6]]
bの要素を変えるとaも変わります。bはaの参照を持っているということでしょうか?なんか不思議です。
c = a.reshape(3, 2)print(c)上記のような書き方もできます。np.arrayには、reshapeというのがついてるようです。 cもbもaの参照を持っているようです。参照を持ちつつ形を変えております。numpyの配列は高機能です。
e = c.reshape(1, -1)print(e)上記のように-1を使うと、これは「おまかせ」ってことになります。 分からないからよきにはからえと伝えております。例えば、[1, 10, 4, 2, …]といった感じの1次元配列があり、5個ずつ配列を分けたいというときは、(-1, 5)とやります。?行5列となりますので、5列ずつの配列をどんどんつくっていけということになります。ただ、ここで大本の配列の要素数が5で割り切れない場合は、エラーになるのか確かめてみます。
e = c.reshape(-1, 4)print(e)cはaの要素数6の1次元配列の参照を持っております。4列ずつに分けろと言われてもやはり無理だったようです。当然(-1, 3)であれば成功します。