Pythonで一次元配列を二次元配列に変換する方法:NumPyとリスト
![]() |
20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード |
| |
週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ |
| |
10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks |
Pythonでデータ処理を行う際、一次元配列(リストやNumPy配列)を二次元配列に変換したいケースは頻繁にあります。これは、特定のアルゴリズムの入力形式に合わせたり、データを表形式で扱いたい場合に必要となる操作です。この記事では、Pythonのnumpy.ndarrayと通常のリスト、それぞれの一次元配列を二次元配列に変換する具体的な方法を、短いサンプルコードとともに解説します。
目次
一次元配列とは?二次元配列とは?
データ構造を理解することは、変換をスムーズに行う上で重要です。
一次元配列(ベクトル)
一次元配列は、データが直線的に並んだものです。Pythonの通常のリストやNumPyの一次元ndarrayがこれにあたります。
例:
-
リスト:
[1, 2, 3, 4, 5] -
NumPy配列:
np.array([1, 2, 3, 4, 5])
二次元配列(行列)
二次元配列は、データが行と列に配置されたものです。数学の行列や表形式のデータと考えることができます。Pythonではリストのリスト、NumPyでは二次元のndarrayがこれにあたります。
例:
-
リストのリスト:
[[1, 2, 3], [4, 5, 6]] -
NumPy配列:
np.array([[1, 2, 3], [4, 5, 6]])
Pythonリストの一次元配列を二次元配列に変換
Pythonの標準リストを使って、一次元リストを二次元リストに変換する方法を説明します。これは主に、指定したサイズで分割して行と列を作るケースが多いです。
1. リスト内包表記とスライスを使う方法
一次元リストを一定のサイズで区切って二次元リストにする場合、リスト内包表記とスライスを組み合わせるのが一般的です。
# 元の一次元リスト
flat_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 1行あたりの要素数
rows_size = 3
# リスト内包表記で変換
two_d_list = [flat_list[i:i + rows_size] for i in range(0, len(flat_list), rows_size)]
print(two_d_list)
# 出力: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
この方法では、range()関数を使って指定した間隔でインデックスを生成し、そのインデックスでリストをスライスして新しい行を作成しています。
2. ループを使う方法
もう少し明示的にループを使って変換することもできます。考え方は上記のスライスと同じです。
flat_list = [1, 2, 3, 4, 5, 6]
rows_size = 2
two_d_list = []
for i in range(0, len(flat_list), rows_size):
two_d_list.append(flat_list[i:i + rows_size])
print(two_d_list)
# 出力: [[1, 2], [3, 4], [5, 6]]
NumPyの一次元配列を二次元配列に変換
数値計算を伴うデータ処理では、PythonのリストよりもNumPy配列を使用する方が一般的です。NumPyは多次元配列の操作に特化しており、一次元配列から二次元配列への変換も非常に簡単かつ効率的に行えます。
1. reshape()メソッドを使う方法(推奨)
NumPy配列の**reshape()メソッド**は、配列の形状(次元)を変更するために使われます。これが一次元配列を二次元配列に変換する最も推奨される方法です。
import numpy as np
# 元の一次元NumPy配列
flat_array = np.array([1, 2, 3, 4, 5, 6])
# 2行3列の二次元配列に変換
two_d_array = flat_array.reshape(2, 3)
print(two_d_array)
# 出力:
# [[1 2 3]
# [4 5 6]]
reshape()に-1を渡すと、NumPyが自動的にその次元のサイズを計算してくれます。これは、行数または列数を固定して残りを自動調整したい場合に便利です。
# 行数を自動調整(列数を3に固定)
two_d_array_auto_rows = flat_array.reshape(-1, 3)
print(two_d_array_auto_rows)
# 出力:
# [[1 2 3]
# [4 5 6]]
# 列数を自動調整(行数を2に固定)
two_d_array_auto_cols = flat_array.reshape(2, -1)
print(two_d_array_auto_cols)
# 出力:
# [[1 2 3]
# [4 5 6]]
2. 次元を追加する方法(特に1列または1行にしたい場合)
元の一次元配列を「1列」または「1行」の二次元配列にしたい場合は、**np.newaxisやexpand_dims**を使う方法も非常に簡潔です。
np.newaxisを使う方法
これは配列に新しい次元を追加する最も一般的な方法です。
import numpy as np
flat_array = np.array([1, 2, 3, 4, 5, 6])
# 行ベクトル(1行にしたい場合)
row_vector = flat_array[np.newaxis, :]
print("行ベクトル:\n", row_vector)
# 出力:
# 行ベクトル:
# [[1 2 3 4 5 6]]
# 列ベクトル(1列にしたい場合)
col_vector = flat_array[:, np.newaxis]
print("列ベクトル:\n", col_vector)
# 出力:
# 列ベクトル:
# [[1]
# [2]
# [3]
# [4]
# [5]
# [6]]
np.newaxisをインデックスのどこに置くかによって、新しい次元が追加される位置(行か列か)が変わります。
np.expand_dims()を使う方法
np.expand_dims()関数も同様に次元を追加できます。
import numpy as np
flat_array = np.array([1, 2, 3, 4, 5, 6])
# axis=0 で行を追加(行ベクトル)
row_vector_expand = np.expand_dims(flat_array, axis=0)
print("行ベクトル (expand_dims):\n", row_vector_expand)
# 出力:
# 行ベクトル (expand_dims):
# [[1 2 3 4 5 6]]
# axis=1 で列を追加(列ベクトル)
col_vector_expand = np.expand_dims(flat_array, axis=1)
print("列ベクトル (expand_dims):\n", col_vector_expand)
# 出力:
# 列ベクトル (expand_dims):
# [[1]
# [2]
# [3]
# [4]
# [5]
# [6]]
axis=0は新しい次元が最初に追加されることを意味し、axis=1は最初の次元の次に追加されることを意味します。
まとめ
Pythonで一次元配列を二次元配列に変換する方法は、使用するデータ構造(リストかNumPyか)によって異なります。
-
Pythonリストの場合、リスト内包表記とスライスを使って特定のサイズで分割するのが一般的です。
-
NumPy配列の場合、
reshape()メソッドが最も柔軟で推奨されます。特に1行または1列にしたい場合は、**np.newaxisやnp.expand_dims()**も非常に便利です。
これらの変換テクニックを習得することで、Pythonでのデータ前処理がより効率的に行えるようになります。
■「らくらくPython塾」が切り開く「呪文コーディング」とは?
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座
![]() |
20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード |
| |
週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ |
| |
10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks |







