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

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

リストやタプルなどのシーケンスを引数として渡すことで、1次元配列を作成できます。

例えば、numpy.array([1, 2, 3])は、要素1, 2, 3を持つ1次元配列を生成します。

また、numpy.arange()を使うと、指定した範囲の連続した数値から1次元配列を作成できます。

例として、numpy.arange(5)は0から4までの1次元配列を返します。

この記事でわかること
  • NumPyで1次元配列を作成する方法
  • 配列の基本的な操作方法
  • 1次元配列の応用例
  • データ処理における活用法
  • 機械学習での特徴量ベクトル化

目次から探す

1次元配列の作成方法

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

numpy.array()関数を使用すると、Pythonのリストやタプルから1次元配列を作成できます。

以下はその例です。

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

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

numpy.arange()関数は、指定した範囲の数値を持つ1次元配列を生成します。

開始値、終了値、ステップ幅を指定できます。

import numpy as np
# 0から9までの1次元配列を作成
array_data = np.arange(0, 10, 1)
print(array_data)
[0 1 2 3 4 5 6 7 8 9]

numpy.linspace()を使った1次元配列の作成

numpy.linspace()関数は、指定した範囲内で等間隔の数値を持つ1次元配列を生成します。

開始値、終了値、生成する要素数を指定できます。

import numpy as np
# 0から1までの間に5つの等間隔の数値を持つ1次元配列を作成
array_data = np.linspace(0, 1, 5)
print(array_data)
[0.   0.25 0.5  0.75 1.  ]

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

numpy.ones()関数を使用すると、指定したサイズのすべての要素が1の1次元配列を作成できます。

import numpy as np
# 要素数5の1次元配列を作成
array_data = np.ones(5)
print(array_data)
[1. 1. 1. 1. 1.]

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

numpy.zeros()関数を使用すると、指定したサイズのすべての要素が0の1次元配列を作成できます。

import numpy as np
# 要素数5の1次元配列を作成
array_data = np.zeros(5)
print(array_data)
[0. 0. 0. 0. 0.]

numpy.random()を使ったランダムな1次元配列の作成

numpy.randomモジュールを使用すると、ランダムな数値を持つ1次元配列を生成できます。

以下は、0から1の間のランダムな数値を持つ1次元配列の例です。

import numpy as np
# 要素数5のランダムな1次元配列を作成
array_data = np.random.rand(5)
print(array_data)
[0.12345678 0.23456789 0.34567890 0.45678901 0.56789012]

これらの方法を使うことで、さまざまな1次元配列を簡単に作成することができます。

1次元配列の操作

配列の要素にアクセスする方法

NumPyの1次元配列では、インデックスを使用して要素にアクセスできます。

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

以下は、要素にアクセスする例です。

import numpy as np
# 1次元配列を作成
array_data = np.array([10, 20, 30, 40, 50])
# インデックス1の要素にアクセス
element = array_data[1]
print(element)
20

配列の要素を変更する方法

配列の特定の要素をインデックスを使って変更することができます。

以下はその例です。

import numpy as np
# 1次元配列を作成
array_data = np.array([10, 20, 30, 40, 50])
# インデックス2の要素を変更
array_data[2] = 100
print(array_data)
[ 10  20 100  40  50]

配列のスライス操作

スライスを使用すると、配列の一部を取得することができます。

開始インデックスと終了インデックスを指定します。

import numpy as np
# 1次元配列を作成
array_data = np.array([10, 20, 30, 40, 50])
# インデックス1から3までの要素を取得
sliced_array = array_data[1:4]
print(sliced_array)
[20 30 40]

配列の形状を確認する方法

配列の形状は、shape属性を使用して確認できます。

1次元配列の場合、形状は要素数を示します。

import numpy as np
# 1次元配列を作成
array_data = np.array([10, 20, 30, 40, 50])
# 配列の形状を確認
shape = array_data.shape
print(shape)
(5,)

配列のデータ型を確認・変更する方法

配列のデータ型は、dtype属性を使用して確認できます。

また、astype()メソッドを使用してデータ型を変更することも可能です。

import numpy as np
# 1次元配列を作成
array_data = np.array([1, 2, 3, 4, 5], dtype=np.int32)
# データ型を確認
data_type = array_data.dtype
# データ型を変更
array_data = array_data.astype(np.float64)
print(data_type)
print(array_data.dtype)
int32
float64

これらの操作を通じて、NumPyの1次元配列を効果的に扱うことができます。

1次元配列の応用

配列の演算(加算、減算、乗算、除算)

NumPyの配列では、要素ごとの演算が簡単に行えます。

以下は、加算、減算、乗算、除算の例です。

import numpy as np
# 1次元配列を作成
array_a = np.array([1, 2, 3, 4, 5])
array_b = np.array([10, 20, 30, 40, 50])
# 演算
addition = array_a + array_b
subtraction = array_a - array_b
multiplication = array_a * array_b
division = array_a / array_b
print("加算:", addition)
print("減算:", subtraction)
print("乗算:", multiplication)
print("除算:", division)
加算: [11 22 33 44 55]
減算: [ -9 -18 -27 -36 -45]
乗算: [ 10  40  90 160 250]
除算: [0.1 0.1 0.1 0.1 0.1]

配列のソート

NumPyでは、numpy.sort()関数を使用して配列をソートできます。

以下はその例です。

import numpy as np
# 1次元配列を作成
array_data = np.array([5, 2, 9, 1, 5, 6])
# 配列をソート
sorted_array = np.sort(array_data)
print("ソート後の配列:", sorted_array)
ソート後の配列: [1 2 5 5 6 9]

配列のフィルタリング

条件を満たす要素だけを抽出するフィルタリングが可能です。

以下は、特定の条件に基づいて要素をフィルタリングする例です。

import numpy as np
# 1次元配列を作成
array_data = np.array([10, 20, 30, 40, 50])
# 30より大きい要素をフィルタリング
filtered_array = array_data[array_data > 30]
print("フィルタリング後の配列:", filtered_array)
フィルタリング後の配列: [40 50]

配列の結合と分割

NumPyでは、numpy.concatenate()を使用して配列を結合し、numpy.split()を使用して配列を分割できます。

以下はその例です。

import numpy as np
# 1次元配列を作成
array_a = np.array([1, 2, 3])
array_b = np.array([4, 5, 6])
# 配列を結合
concatenated_array = np.concatenate((array_a, array_b))
# 配列を分割
split_arrays = np.split(concatenated_array, 2)
print("結合後の配列:", concatenated_array)
print("分割後の配列:", split_arrays)
結合後の配列: [1 2 3 4 5 6]
分割後の配列: [array([1, 2, 3]), array([4, 5, 6])]

配列のコピーとビューの違い

NumPyでは、配列をコピーする方法とビューを作成する方法があります。

コピーは新しい配列を作成し、ビューは元の配列を参照します。

以下はその違いを示す例です。

import numpy as np
# 1次元配列を作成
array_data = np.array([1, 2, 3, 4, 5])
# 配列のコピーを作成
array_copy = array_data.copy()
# 配列のビューを作成
array_view = array_data.view()
# 元の配列を変更
array_data[0] = 10
print("元の配列:", array_data)
print("コピー:", array_copy)
print("ビュー:", array_view)
元の配列: [10  2  3  4  5]
コピー: [1 2 3 4 5]
ビュー: [10  2  3  4  5]

このように、NumPyの1次元配列は多様な操作が可能で、データ処理に非常に便利です。

1次元配列の応用例

数列の生成と操作

NumPyを使用すると、さまざまな数列を簡単に生成し、操作することができます。

例えば、フィボナッチ数列を生成する場合、以下のように実装できます。

import numpy as np
# フィボナッチ数列を生成
def fibonacci(n):
    fib_array = np.zeros(n, dtype=int)
    fib_array[0], fib_array[1] = 0, 1
    for i in range(2, n):
        fib_array[i] = fib_array[i-1] + fib_array[i-2]
    return fib_array
# 10項のフィボナッチ数列を生成
fib_sequence = fibonacci(10)
print("フィボナッチ数列:", fib_sequence)
フィボナッチ数列: [0 1 1 2 3 5 8 13 21 34]

データの前処理における1次元配列の利用

データ分析や機械学習の前処理では、1次元配列を使用してデータを正規化したり、欠損値を処理したりします。

以下は、データの正規化の例です。

import numpy as np
# サンプルデータ
data = np.array([10, 20, 30, 40, 50])
# 正規化
normalized_data = (data - np.min(data)) / (np.max(data) - np.min(data))
print("正規化されたデータ:", normalized_data)
正規化されたデータ: [0.  0.25 0.5  0.75 1.  ]

グラフ作成のためのデータ準備

1次元配列は、グラフ作成のためのデータ準備にも利用されます。

Matplotlibを使用して、1次元配列をプロットする例を示します。

import numpy as np
import matplotlib.pyplot as plt
# x軸のデータ
x = np.linspace(0, 10, 100)
# y軸のデータ(サイン波)
y = np.sin(x)
# グラフを作成
plt.plot(x, y)
plt.title("サイン波")
plt.xlabel("x")
plt.ylabel("sin(x)")
plt.grid()
plt.show()

このコードを実行すると、サイン波のグラフが表示されます。

機械学習における特徴量のベクトル化

機械学習では、データを数値ベクトルに変換することが重要です。

1次元配列を使用して、テキストデータを数値ベクトルに変換する例を示します。

以下は、単純なBag of Wordsモデルの実装例です。

import numpy as np
# サンプルテキスト
documents = ["私は猫が好きです", "私は犬が好きです", "猫と犬は友達です"]
# 単語のリストを作成
words = set(" ".join(documents).split())
word_to_index = {word: i for i, word in enumerate(words)}
# 特徴量ベクトルを作成
def vectorize(document):
    vector = np.zeros(len(word_to_index))
    for word in document.split():
        if word in word_to_index:
            vector[word_to_index[word]] += 1
    return vector
# 各文書をベクトル化
vectors = np.array([vectorize(doc) for doc in documents])
print("特徴量ベクトル:\n", vectors)
特徴量ベクトル:
 [[0. 0. 1.]
 [0. 1. 0.]
 [1. 0. 0.]]

このように、1次元配列はさまざまな応用に利用され、データ処理や分析において非常に重要な役割を果たします。

よくある質問

numpy.array()とPythonのリストの違いは?

numpy.array()とPythonのリストにはいくつかの違いがあります。

主な違いは以下の通りです。

  • データ型: NumPy配列は同じデータ型の要素を持つのに対し、Pythonのリストは異なるデータ型の要素を含むことができます。
  • 性能: NumPy配列は、数値計算に最適化されており、演算が高速です。

リストは一般的なデータ構造であり、数値計算には向いていません。

  • 機能: NumPyは多次元配列や行列演算、線形代数、統計などの高度な機能を提供していますが、Pythonのリストは基本的な操作に限られます。

numpy.arange()とnumpy.linspace()の違いは?

numpy.arange()numpy.linspace()は、数値の配列を生成するための関数ですが、以下の点で異なります。

  • 引数の指定: numpy.arange()は開始値、終了値、ステップ幅を指定して配列を生成します。

一方、numpy.linspace()は開始値、終了値、生成する要素数を指定します。

  • 出力の間隔: numpy.arange()は指定したステップ幅で数値を生成するため、間隔が不均一になることがありますが、numpy.linspace()は指定した要素数に基づいて均等に間隔を分けた数値を生成します。

1次元配列のサイズを変更する方法は?

1次元配列のサイズを変更するには、numpy.resize()またはnumpy.reshape()を使用します。

numpy.resize()は新しいサイズに合わせて配列を変更し、必要に応じて要素を繰り返します。

一方、numpy.reshape()は元の配列のデータを保持しつつ、形状を変更しますが、サイズが異なる場合はエラーが発生します。

以下はそれぞれの例です。

import numpy as np
# 1次元配列を作成
array_data = np.array([1, 2, 3, 4, 5])
# サイズを変更(resize)
resized_array = np.resize(array_data, (3,))
# サイズを変更(reshape)
reshaped_array = array_data.reshape((5, 1))
print("リサイズ後の配列:", resized_array)
print("リシェイプ後の配列:\n", reshaped_array)
リサイズ後の配列: [1 2 3]
リシェイプ後の配列:
 [[1]
 [2]
 [3]
 [4]
 [5]]

このように、NumPyを使用することで、1次元配列のサイズを柔軟に変更することができます。

まとめ

この記事では、NumPyを使用して1次元配列を作成し、操作する方法について詳しく解説しました。

配列の生成方法や演算、フィルタリング、ソート、結合、分割など、さまざまな機能を活用することで、データ処理や分析が効率的に行えることがわかりました。

これらの知識を活かして、実際のデータ分析や機械学習のプロジェクトに取り組んでみてください。

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

関連カテゴリーから探す

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