Python入門トップページ


目次

  1. NumPy とは
  2. Python リストの場合
  3. NumPy の使用例
    1. 1次元配列(ベクトル)
    2. 2次元配列(行列)
    3. 要素の取り出し
    4. ベクトルと行列の変換
    5. NumPy のデータ型
    6. NumPy 配列の作成と操作
    7. ユニバーサル関数と集約関数
    8. NumPy 配列のソート
    9. NumPy の構造化配列
    10. NumPy 配列の保存と読み込み
    11. 表示オプションの変更
  4. NumPy で線形代数
  5. NumPy の乱数生成

NumPy

NumPy の使用例

2次元配列(行列)

次に2次元配列を使ってみよう.リストのリストを np.array() 関数で行列に変換することができます.

行列の定義
import numpy as np # プログラムの先頭でモジュールを読み込む
# 行列
A = np.array([[1, 2], [3, 4]])
print(A)
[[1 2]
 [3 4]]
行列の定義
B = np.array([[7,8], [9, 10]])
print(B)
[[ 7  8]
 [ 9 10]]

行列に対して +* 演算子を使用すると,要素ごとに処理されます.

要素ごとの和
C = A + B # 要素ごとの和
print(C)
[[ 8 10]
 [12 14]]

行列の要素ごとの積はアダマール積と呼ばれます.

要素ごとの積(アダマール積)
C = A * B   # 要素ごとの積
print(C)
[[ 7 16]
 [27 40]]

行列の積は np.dot() 関数や Python の @ 演算子を利用すると良いでしょう.どちらも同じ結果になり,処理速度に大きな差はありません.

行列の積
C = np.dot(A, B) # 行列の積
# 1x7+2x9,  1x8+2x10
# 3x7+4x9,  3x8+4x10
print(C)
[[25 28]
 [57 64]]
行列の積 (@演算子)
C = A @ B
print(C)
[[25 28]
 [57 64]]

行列の転置には np.transpose() 関数を利用できるが,これ以外にもいくつかの記述方法があります.

行列の転置1
print(A)
print(np.transpose(A))
[[1 2]
 [3 4]]
[[1 3]
 [2 4]]
行列の転置2
print(A.transpose())
[[1 3]
 [2 4]]
行列の転置3
print(A.T)
[[1 3]
 [2 4]]

例えば,「ゴチ」バトルの例で,商品価格の一覧が [50, 60, 70, 80, 90, 100] で与えられるとき,注文の組み合わせ xごとに合計価格を求めたいような場合は,次のようにすると良いでしょう.詳細はここの図で確認してください.集団 \(P\) の合計価格を求めています.

行列の転置4
# 価格の一覧
w = np.array([50, 60, 70, 80, 90, 100])
# 注文方法(0は注文しない,1は注文する)
x = np.array([
    [0, 1, 0, 0, 1, 1],  # この行は 60, 90, 100円の商品を注文することを意味している
    [0, 1, 1, 1, 0, 0],
    [1, 1, 0, 0, 0, 0],
    [0, 1, 1, 1, 0, 1]
])
print('価格の一覧:', w)
print('注文方法')
print(x)
total = np.dot(x,w)
print('合計価格:', total)
価格の一覧: [ 50  60  70  80  90 100]
注文方法
[[0 1 0 0 1 1]
 [0 1 1 1 0 0]
 [1 1 0 0 0 0]
 [0 1 1 1 0 1]]
合計価格: [250 210 110 310]

目次に戻る