[Python] NumPyで2次元配列を作成する方法

NumPyで2次元配列を作成するには、numpy.array()関数を使用します。

リストのリストを引数として渡すことで、2次元配列を作成できます。

例えば、numpy.array([[1, 2, 3], [4, 5, 6]])は、2行3列の2次元配列を生成します。

また、numpy.zeros()numpy.ones()を使って、すべての要素が0や1の2次元配列を作成することも可能です。

この記事でわかること
  • NumPyを使った2次元配列の作成方法
  • 基本操作としての要素アクセス
  • 行列演算やデータ分析の応用
  • 配列の結合と分割の手法
  • 画像データ処理の実践例

目次から探す

2次元配列の作成方法

numpy.array()を使った2次元配列の作成

numpy.array()を使用すると、リストやタプルから簡単に2次元配列を作成できます。

以下はその例です。

import numpy as np
# リストから2次元配列を作成
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
print(array_2d)
[[1 2 3]
 [4 5 6]]

このコードでは、2つのリストを含むリストを渡すことで、2次元配列を生成しています。

numpy.zeros()を使った2次元配列の作成

numpy.zeros()を使うと、指定した形状のすべての要素が0の2次元配列を作成できます。

import numpy as np
# 3行2列のゼロ行列を作成
zeros_array = np.zeros((3, 2))
print(zeros_array)
[[0. 0.]
 [0. 0.]
 [0. 0.]]

このコードでは、3行2列のゼロで埋められた配列を作成しています。

numpy.ones()を使った2次元配列の作成

numpy.ones()を使用すると、すべての要素が1の2次元配列を作成できます。

import numpy as np
# 2行3列の行列を作成
ones_array = np.ones((2, 3))
print(ones_array)
[[1. 1. 1.]
 [1. 1. 1.]]

このコードでは、2行3列の1で埋められた配列を生成しています。

numpy.full()を使った任意の値で埋めた2次元配列の作成

numpy.full()を使うと、指定した値で埋められた2次元配列を作成できます。

import numpy as np
# 2行2列の配列を5で埋める
full_array = np.full((2, 2), 5)
print(full_array)
[[5 5]
 [5 5]]

このコードでは、2行2列の配列を5で埋めています。

numpy.empty()を使った未初期化の2次元配列の作成

numpy.empty()を使用すると、未初期化の2次元配列を作成できます。

これは、メモリを確保するだけで、値は不定です。

import numpy as np
# 2行3列の未初期化の配列を作成
empty_array = np.empty((2, 3))
print(empty_array)
[[1. 1. 1.]
 [1. 1. 1.]]

出力結果は未初期化のため、実行するたびに異なる値が表示されることがあります。

numpy.arange()とreshape()を使った2次元配列の作成

numpy.arange()を使って連続した数値を生成し、reshape()で2次元配列に変換することができます。

import numpy as np
# 0から5までの数値を生成し、2行3列の配列に変形
arange_array = np.arange(6).reshape((2, 3))
print(arange_array)
[[0 1 2]
 [3 4 5]]

このコードでは、0から5までの数値を持つ2行3列の配列を作成しています。

2次元配列の基本操作

要素へのアクセス方法

2次元配列の要素には、行と列のインデックスを使ってアクセスします。

インデックスは0から始まります。

import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
# 1行2列の要素にアクセス
element = array_2d[0, 1]  # 2を取得
print(element)
2

このコードでは、1行2列の要素にアクセスし、その値を取得しています。

要素の変更方法

特定の要素を変更するには、インデックスを指定して新しい値を代入します。

import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
# 1行2列の要素を変更
array_2d[0, 1] = 10
print(array_2d)
[[ 1 10  3]
 [ 4  5  6]]

このコードでは、1行2列の要素を10に変更しています。

行や列の抽出方法

行や列を抽出するには、スライシングを使用します。

行全体や列全体を簡単に取得できます。

import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
# 1行目を抽出
first_row = array_2d[0, :]
# 2列目を抽出
second_column = array_2d[:, 1]
print("1行目:", first_row)
print("2列目:", second_column)
1行目: [1 2 3]
2列目: [2 5]

このコードでは、1行目と2列目をそれぞれ抽出しています。

配列の形状を確認するshape属性

shape属性を使用すると、配列の形状(行数と列数)を確認できます。

import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
# 配列の形状を確認
shape = array_2d.shape
print(shape)
(2, 3)

このコードでは、配列の形状が2行3列であることを示しています。

配列の次元数を確認するndim属性

ndim属性を使用すると、配列の次元数を確認できます。

import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
# 配列の次元数を確認
dimensions = array_2d.ndim
print(dimensions)
2

このコードでは、配列が2次元であることを示しています。

2次元配列の形状変更

reshape()を使った形状変更

reshape()メソッドを使用すると、配列の形状を変更できます。

元のデータはそのままで、異なる形状の配列を作成します。

import numpy as np
# 1次元配列の作成
array_1d = np.array([1, 2, 3, 4, 5, 6])
# 2行3列の形状に変更
array_2d = array_1d.reshape((2, 3))
print(array_2d)
[[1 2 3]
 [4 5 6]]

このコードでは、1次元配列を2行3列の2次元配列に変形しています。

flatten()を使った1次元配列への変換

flatten()メソッドを使用すると、2次元配列を1次元配列に変換できます。

import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
# 1次元配列に変換
array_1d = array_2d.flatten()
print(array_1d)
[1 2 3 4 5 6]

このコードでは、2次元配列を1次元配列に変換しています。

transpose()を使った転置

transpose()メソッドを使用すると、配列を転置できます。

行と列が入れ替わります。

import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
# 転置
transposed_array = array_2d.transpose()
print(transposed_array)
[[1 4]
 [2 5]
 [3 6]]

このコードでは、元の配列の行と列が入れ替わった転置配列を生成しています。

resize()とreshape()の違い

resize()reshape()は似た機能を持っていますが、いくつかの重要な違いがあります。

スクロールできます
特徴reshape()resize()
元の配列の変更しないする(元の配列が変更される)
新しい形状の指定新しい形状を指定する新しい形状を指定する
サイズの不一致エラーが発生するサイズが不一致の場合、配列が切り詰められるか、ゼロで埋められる
import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
# reshapeの使用
reshaped_array = array_2d.reshape((3, 2))
print("Reshaped Array:\n", reshaped_array)
# resizeの使用
array_2d.resize((3, 2))
print("Resized Array:\n", array_2d)
Reshaped Array:
 [[1 2]
 [3 4]
 [5 6]]
Resized Array:
 [[1 2]
 [3 4]
 [5 6]]

このコードでは、reshape()で新しい配列を作成し、resize()で元の配列を変更しています。

2次元配列の結合と分割

hstack()を使った水平方向の結合

hstack()を使用すると、複数の配列を水平方向に結合できます。

配列の行数が同じである必要があります。

import numpy as np
# 2つの2次元配列を作成
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])
# 水平方向に結合
hstacked_array = np.hstack((array1, array2))
print(hstacked_array)
[[1 2 5 6]
 [3 4 7 8]]

このコードでは、2つの配列を水平方向に結合しています。

vstack()を使った垂直方向の結合

vstack()を使用すると、複数の配列を垂直方向に結合できます。

配列の列数が同じである必要があります。

import numpy as np
# 2つの2次元配列を作成
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])
# 垂直方向に結合
vstacked_array = np.vstack((array1, array2))
print(vstacked_array)
[[1 2]
 [3 4]
 [5 6]
 [7 8]]

このコードでは、2つの配列を垂直方向に結合しています。

concatenate()を使った任意の軸での結合

concatenate()を使用すると、任意の軸で配列を結合できます。

axis引数で結合する軸を指定します。

import numpy as np
# 2つの2次元配列を作成
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])
# 水平方向に結合
concatenated_array_h = np.concatenate((array1, array2), axis=1)
print("水平方向の結合:\n", concatenated_array_h)
# 垂直方向に結合
concatenated_array_v = np.concatenate((array1, array2), axis=0)
print("垂直方向の結合:\n", concatenated_array_v)
水平方向の結合:
 [[1 2 5 6]
 [3 4 7 8]]
垂直方向の結合:
 [[1 2]
 [3 4]
 [5 6]
 [7 8]]

このコードでは、concatenate()を使って水平方向と垂直方向の両方で配列を結合しています。

split()を使った配列の分割

split()を使用すると、配列を指定した数の部分に分割できます。

indices_or_sections引数で分割の位置を指定します。

import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 2つの部分に分割
split_arrays = np.split(array_2d, 3)
for i, arr in enumerate(split_arrays):
    print(f"分割された配列 {i+1}:\n", arr)
分割された配列 1:
 [[1 2 3]]
分割された配列 2:
 [[4 5 6]]
分割された配列 3:
 [[7 8 9]]

このコードでは、3つの部分に分割された配列を表示しています。

hsplit()とvsplit()を使った水平方向・垂直方向の分割

hsplit()を使用すると、配列を水平方向に分割できます。

vsplit()を使用すると、配列を垂直方向に分割できます。

import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
# 水平方向に分割
hsplit_arrays = np.hsplit(array_2d, 2)
for i, arr in enumerate(hsplit_arrays):
    print(f"水平方向に分割された配列 {i+1}:\n", arr)
# 垂直方向に分割
vsplit_arrays = np.vsplit(array_2d, 2)
for i, arr in enumerate(vsplit_arrays):
    print(f"垂直方向に分割された配列 {i+1}:\n", arr)
水平方向に分割された配列 1:
 [[1 2]
 [5 6]]
水平方向に分割された配列 2:
 [[3 4]
 [7 8]]
垂直方向に分割された配列 1:
 [[1 2 3 4]]
垂直方向に分割された配列 2:
 [[5 6 7 8]]

このコードでは、配列を水平方向と垂直方向に分割した結果を表示しています。

2次元配列の応用例

2次元配列を使った行列演算

NumPyの2次元配列は、行列演算に非常に便利です。

行列の加算、減算、乗算、転置などが簡単に行えます。

import numpy as np
# 2つの行列を作成
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])
# 行列の加算
matrix_sum = matrix_a + matrix_b
print("行列の加算:\n", matrix_sum)
# 行列の乗算
matrix_product = np.dot(matrix_a, matrix_b)
print("行列の乗算:\n", matrix_product)
行列の加算:
 [[ 6  8]
 [10 12]]
行列の乗算:
 [[19 22]
 [43 50]]

このコードでは、2つの行列の加算と乗算を行っています。

2次元配列を使った画像データの処理

画像は通常、2次元配列として表現されます。

NumPyを使用して画像データを処理することができます。

import numpy as np
import matplotlib.pyplot as plt
# 画像データの作成(例としてランダムなデータを使用)
image_data = np.random.rand(100, 100)
# 画像を表示
plt.imshow(image_data, cmap='gray')
plt.title("ランダムな画像データ")
plt.show()

このコードでは、ランダムなデータを生成し、グレースケールの画像として表示しています。

2次元配列を使ったデータ分析

2次元配列は、データ分析においても広く使用されます。

例えば、データフレームのように行と列でデータを管理できます。

import numpy as np
import pandas as pd
# データの作成
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
# 各列の平均を計算
mean_values = df.mean()
print("各列の平均:\n", mean_values)
各列の平均:
 A    4.0
B    5.0
C    6.0
dtype: float64

このコードでは、2次元配列をデータフレームに変換し、各列の平均を計算しています。

2次元配列を使った統計計算

NumPyを使用すると、2次元配列に対して統計計算を簡単に行うことができます。

例えば、合計、平均、標準偏差などです。

import numpy as np
# 2次元配列の作成
data = np.array([[1, 2, 3], [4, 5, 6]])
# 各列の合計
column_sum = np.sum(data, axis=0)
print("各列の合計:\n", column_sum)
# 各行の平均
row_mean = np.mean(data, axis=1)
print("各行の平均:\n", row_mean)
各列の合計:
 [5 7 9]
各行の平均:
 [2. 5.]

このコードでは、各列の合計と各行の平均を計算しています。

2次元配列を使ったフィルタリング処理

2次元配列を使用して、データのフィルタリング処理を行うことができます。

条件に基づいて特定の要素を抽出できます。

import numpy as np
# 2次元配列の作成
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 5より大きい要素をフィルタリング
filtered_data = data[data > 5]
print("5より大きい要素:\n", filtered_data)
5より大きい要素:
 [6 7 8 9]

このコードでは、2次元配列から5より大きい要素を抽出しています。

よくある質問

numpy.array()とnumpy.asarray()の違いは?

numpy.array()numpy.asarray()は、どちらも配列を作成するための関数ですが、いくつかの重要な違いがあります。

  • データのコピー: numpy.array()は、入力データを常にコピーして新しい配列を作成します。

一方、numpy.asarray()は、入力データがすでにNumPy配列である場合、コピーを作成せずにそのまま参照を返します。

  • データ型の指定: numpy.array()では、dtype引数を指定することで、配列のデータ型を明示的に設定できますが、numpy.asarray()では、データ型の変換が必要な場合にのみ新しい配列が作成されます。
import numpy as np
# numpy.array()の使用
arr1 = np.array([1, 2, 3])
# numpy.asarray()の使用
arr2 = np.asarray(arr1)
print(arr1 is arr2)  # False(異なるオブジェクト)

2次元配列の要素を効率的に初期化する方法は?

2次元配列の要素を効率的に初期化する方法として、numpy.zeros()numpy.ones()numpy.full()などの関数を使用することが一般的です。

これらの関数を使うことで、特定の値で埋められた配列を簡単に作成できます。

  • numpy.zeros(shape): 指定した形状のすべての要素が0の配列を作成します。
  • numpy.ones(shape): 指定した形状のすべての要素が1の配列を作成します。
  • numpy.full(shape, fill_value): 指定した形状のすべての要素がfill_valueで埋められた配列を作成します。
import numpy as np
# 3行4列のゼロ行列を作成
zeros_array = np.zeros((3, 4))
# 2行3列の1で埋めた行列を作成
ones_array = np.ones((2, 3))
# 2行2列の5で埋めた行列を作成
full_array = np.full((2, 2), 5)

2次元配列のサイズを動的に変更する方法は?

2次元配列のサイズを動的に変更するには、numpy.resize()numpy.append()numpy.concatenate()などの関数を使用します。

  • numpy.resize(): 配列のサイズを変更します。

新しいサイズが元のサイズより小さい場合、データが切り詰められます。

  • numpy.append(): 配列に新しい要素を追加します。

元の配列は変更されず、新しい配列が返されます。

  • numpy.concatenate(): 複数の配列を結合して新しい配列を作成します。
import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2], [3, 4]])
# サイズを変更
resized_array = np.resize(array_2d, (3, 2))
print("リサイズされた配列:\n", resized_array)
# 要素を追加
appended_array = np.append(array_2d, [[5, 6]], axis=0)
print("要素を追加した配列:\n", appended_array)
リサイズされた配列:
 [[1 2]
 [3 4]
 [1 2]]
要素を追加した配列:
 [[1 2]
 [3 4]
 [5 6]]

このように、さまざまな方法で2次元配列のサイズを動的に変更することができます。

まとめ

この記事では、NumPyを使用して2次元配列を作成し、基本的な操作や形状変更、結合・分割、さらには応用例について詳しく解説しました。

これにより、2次元配列の扱い方やその活用方法についての理解が深まったことでしょう。

今後は、実際のデータ処理や分析において、NumPyの機能を積極的に活用してみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • URLをコピーしました!
目次から探す