Pocket
LINEで送る

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)であれば成功します。

Pocket
LINEで送る

カテゴリー: プログラミング

コメントください

関連記事

プログラミング

cakePHP2 – 多言語化

多言語化します。 cakephpマニュアルのこのページに説明が書いてあ 続きを読む …

プログラミング

Go言語によるビットコインのフルノード実装btcdを調べる(2)

btcdを実行した際のプログラムの流れを最初から確認してみます。 se 続きを読む …

%d人のブロガーが「いいね」をつけました。