.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

多次元配列における数値計算を効率的に行うことをサポートする数学関数ライブラリ

詳細

準備

インストール

> python -m pip install numpy

インポート

>>>import numpy as np

関数

数列生成

統計関数

行列演算

信号処理

ファースト・ステップ

NumPyの配列

1次元配列はベクトルとも言う。

生成

>>>x=np.array([1.0,2.0,3.0])
>>> x
array([1., 2., 3.])
>>>print(x)
[1. 2. 3.]
>>>type(x)
<class 'numpy.ndarray'>

確認

>>>x=np.array([1.0,2.0,3.0])

>>> np.ndim(x) # 配列の次元
1

>>> x.shape    # 次元の形状
(3,)

>>> x.shape[0] # 次元の要素数
4

算術計算

同じ数の要素を持つ2つのNumPy配列を算術計算で処理する。

>>>x=np.array([1.0,2.0,3.0])
>>>y=np.array([2.0,4.0,6.0])

統計計算

NumPyのN次配列

行列

行列とは?

    列↓
  ┌      ┐
行│○  ○│
→│      │
  │○  ○│
  └      ┘

テンソル

テンソルとは?

生成

>>> a=np.array([[1,2],[3,4],[5,6]])
>>> print(a)
[[1 2]
 [3 4]
 [5 6]]
>>> np.ndim(a) # 配列の次元
2
>>> a.shape    # 行列の形状
(3, 2)         # 行数・列数
>>> a.dtype    # 行列要素のデータ型
dtype('int32')

算術計算

要素へのアクセス

インデックス

>>> a=np.array([[51, 55], [14, 19], [0, 4]])
>>> print(a)
[[51 55]
 [14 19]
 [ 0  4]]

ベクトル化 & 抽出

ブロード・キャスト

スカラ値や異なる形状の配列と計算を行う。

スカラ値

配列とスカラ値との計算では、スカラ値が配列形状に拡張され計算される。

異なる形状

行列の積算

セカンド・ステップ

行列の積算

A行列 * B行列 =C行列

2行2列の場合

┌      ┐┌      ┐   ┌                    ┐
│a1  b1││a2  b2│   │a1a2+b1c2  a1b2+b1d2│
│      ││      │ = │                    │
│c1  d1││c2  d2│   │c1a2+d1c2  c1b2+d1d2│
└      ┘└      ┘   └                    ┘
  A行列    B行列              C行列
  2行2列    2行2列              2行2列

x行y列の場合

計算後のC行列は、A行列の行数 * B行列の列数の行列になる。

┌     ┐┌  ┐   ┌     ┐┌    ┐  ┌         ┐
│a1 b1││a2│   │a1 b1││a2 0│  │a1a2+b1b2│
│     ││  │ = │     ││    │ =│         │
│c1 d1││b2│   │c1 d1││b2 0│  │c1a2+d1b2│ 
└     ┘└  ┘   └     ┘└    ┘  └         ┘ 
  A行列   B行列                       C行列
  2行2列   2行1列                       2行1列
┌      ┐┌              ┐   ┌                                          ┐
│a1  b1││a2  b2  c2  d2│   │a1a2+b1e2  a1b2+b1f2  a1c2+b1g2  a1d2+b1h2│
│      ││              │   │                                          │
│c1  d1││e2  f2  g2  h2│ = │c1a2+d1e2  c1b2+d1f2  c1c2+d1g2  c1d2+d1h2│
│      │└              ┘   │                                          │
│e1  f1│                     │e1a2+f1e2  e1b2+f1f2  e1c2+f1g2  e1d2+f1h2│
└      ┘                     └                                          ┘
  A行列        B行列                             C行列
  3行2列        2行4列                             3行4列

メソッド

NumPyのdot(ドット積)メソッドを使用する。

>>> a=np.array([[1,2,3],[4,5,6]])
>>> b=np.array([[1,2],[3,4],[5,6]])
>>> c=np.array([[1,2],[3,4]])
>>> d=np.array([7,8])

>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> b
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> c
array([[1, 2],
       [3, 4]])
>>> d
array([7, 8])

>>> np.dot(a, b)
array([[22, 28],
       [49, 64]])

>>> np.dot(b, c)
array([[ 7, 10],
       [15, 22],
       [23, 34]])

>>> np.dot(b, d)
array([23, 53, 83])

>>> np.dot(a, c) # A行列の列数とB行列の行数が一致しない。
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: shapes (2,3) and (2,2) not aligned: 3 (dim 1) != 2 (dim 0)

要素ごとの掛け算でないことに注意

信号処理

参考


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS