自由自在に姿を変える!numpyの配列操作と変形(reshape)を極めよう

こんにちは。ゆうせいです。

前回は、膨大なデータの中から欲しいものだけを「ふるい」にかけるフィルタリングについて解説しました。必要なデータが手元に揃ったら、次はそのデータの「並び方」を整えて、計算しやすい形に整える技術が必要になります。

それが、今回お伝えする 配列の操作と変形 です。

皆さんは、粘土細工をしたことがありますか。同じ量の粘土でも、細長く伸ばせばヘビになりますし、平たく潰せばパンケーキになりますよね。numpyの配列も、中身の数字はそのままに、その形(次元や行列の数)を自由自在に変えることができるのです!

形を変える魔法の杖 reshape

配列の変形で最もよく使われるのが、 reshape(リシェイプ) という関数です。

例えば、 1 から 12 までの数字が横一列に並んだ「 1 次元配列」があるとします。これを、カレンダーのように「 34 列」の表に変えたいときに reshape を使います。

このとき、絶対に守らなければならない鉄のルールがあります。それは、 変形前と変形後で、要素の総数が一致していなければならない ということです!

数のつじつまを合わせよう

例えば、 12 個の要素がある場合、次のような変形は可能です。

  • 3\times 4 列 = 12
  • 2\times 6 列 = 12
  • 1\times 12 列 = 12

しかし、 5\times 3 列 = 15 に変形しようとすると、数が足りないためnumpyに「そんなの無理だよ!」と怒られてしまいます。

転置(てんち)で縦と横を入れ替える

もう一つ、データ分析で非常によく使う操作が 転置(T属性) です。

これは、表の「行」と「列」をそっくりそのまま入れ替える操作です。高校数学の行列でも登場する概念ですが、numpyなら末尾に .T と付けるだけで一瞬で完了します。

例えば、 100 人の生徒(行)の 3 教科の点数(列)が並んでいる表を、 3 教科(行)ごとの 100 人のデータ(列)に組み替えたいときに便利です。

配列変形のメリットと注意点

メリット

  1. AIモデルへの適合:ディープラーニングなどのAIでは、入力データの形が厳密に決まっています。 reshape を使えば、どんなデータもAIが食べやすい形に整えられます。
  2. 計算の効率化:データの向きを揃えることで、複雑な数式も一行のコードで計算できるようになります。

デメリット(注意点)

スライスのときと同様に、 reshape も基本的には 元のデータと中身を共有 しています。変形後の配列の数字を書き換えると、元の配列の数字も変わってしまうことがあるので、慎重に操作しましょう。

よく使う変形操作のまとめ

操作名プログラムでの書き方効果
reshapearray.reshape(行, 列)指定した形に作り変える
転置array.T縦と横をひっくり返す
flattenarray.flatten()どんな多次元配列も横一列にする

実際に配列をトランスフォームさせてみよう!

それでは、 1 列のデータを表形式に変えて、さらにそれをひっくり返してみましょう。

import numpy as np

1から6までの数字を作る

data = np.arange(1, 7)

print("元の形:", data)

2行3列に変形

matrix = data.reshape(2, 3)

print("2行3列に変形:\n", matrix)

縦と横を入れ替える(転置)

transposed = matrix.T

print("縦横を入れ替え:\n", transposed)

コードを実行して、数字の並びがダイナミックに変わる様子を確認できましたか。

自由自在に形を操るための指針

配列の変形ができるようになると、データ分析の表現力は一気に高まります。これからの学習では、ぜひ以下のことにチャレンジしてみてください。

  1. reshape の引数に -1 を入れるテクニック(自動計算)を調べて、楽をする方法を学ぶ。
  2. 画像データ(縦 \times\times 色の 3 次元)を、一列のデータに変換する練習をしてみる。
  3. 複数の配列を縦や横に繋げる np.concatenate()np.vstack() についても触れてみる。

「データの形」を意識できるようになれば、もうあなたは初心者卒業です。

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。