[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次元配列を作成することも可能です。
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を使用して2次元配列を作成し、基本的な操作や形状変更、結合・分割、さらには応用例について詳しく解説しました。
これにより、2次元配列の扱い方やその活用方法についての理解が深まったことでしょう。
今後は、実際のデータ処理や分析において、NumPyの機能を積極的に活用してみてください。