NumPy配列を操作する際に、次元指定が重要な役割を果たします。特に、次元指定においてよく使われるのは、(n, 1)と(n,)の2つの形式です。これらの形式は、配列の次元を表すために使用されますが、微妙な違いがあります。
(n, 1)形式の配列は、2次元の列ベクトルを表します。つまり、n行1列の配列となります。一方、(n,)形式の配列は、1次元の配列を表します。つまり、n要素の配列となります。
この違いは、NumPyの関数や演算子によって異なる振る舞いをすることがあります。例えば、(n, 1)形式の配列は、要素ごとの演算や行列演算において、自動的にブロードキャスト(要素の拡張)が行われます。一方、(n,)形式の配列は、要素ごとの演算ではブロードキャストが行われません。
これらの違いを理解するために、いくつかのコード例を見てみましょう。
import numpy as np
# (n, 1)形式の配列の作成
a = np.array([[1], [2], [3]])
# (n,)形式の配列の作成
b = np.array([1, 2, 3])
# 要素ごとの演算
c = a + b
print(c)
# 出力: [[2 3 4]
# [3 4 5]
# [4 5 6]]
# 行列演算
d = np.dot(a, b)
print(d)
# 出力: [[1 2 3]
# [2 4 6]
# [3 6 9]]
上記の例では、(n, 1)形式の配列と(n,)形式の配列を作成し、要素ごとの演算と行列演算を行っています。要素ごとの演算では、(n, 1)形式の配列が(n,)形式の配列と要素ごとにブロードキャストされています。一方、行列演算では、(n, 1)形式の配列と(n,)形式の配列が正しく行列として扱われています。
したがって、NumPy配列を操作する際には、配列の次元指定に注意する必要があります。適切な次元指定を行うことで、正しい結果を得ることができます。
このように、(n, 1)形式と(n,)形式の配列の違いと使い方について説明しました。適切な次元指定を行うことで、NumPy配列を効果的に操作することができます。