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] = 10 print(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)であれば成功します。