LoginSignup
0
2

More than 3 years have passed since last update.

Python #Numpy基礎

Posted at

学習メモ・備忘録

Numpyについて

豊富な数学計算ライブラリをもち、効率的な数値計算を行うことのできる代表的なライブラリ。

ndarray型

代表的な数値計算パッケージのNumpyで使用する基本データ型。

記述例
# ndarray型の作成
import numpy

a = [0, 1, 2, 3]
b = numpy.array(a)   # リストからndarray型を作成
print('b = ', b)

c = [1, 2]
d = [2, 3]
e = [3, 4]
f = numpy.array([c, d, e])   # 二次元のndarray型を作成
print('f = ', f)

g = numpy.array(a, dtype = numpy.float16)   # データ型を指定してndarrayを作成
print('g = ', g)

実行結果

b = [0 1 2 3]
f = [[1 2]
[2 3]
[3 4]]
g = [0. 1. 2. 3.]

基本的な数値演算を行うメソッド

ndarray型のデータやリストに対して、Numpyに用意されているメソッドを使うと様々な数値演算ができる。代表的な物を以下に紹介する。

import numpy

h = numpy.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

i = numpy.median(h)   # 中央値
j = numpy.mean(h)   # 平均値
k = numpy.std(h)   # 標準偏差
l = numpy.var(h)   # 分散

print(i)
print(j)
print(k)
print(l)

実行結果

4.5
4.5
2.8722813232690143
8.25

非数と無限大

Numpyでは数値でないことを示す非数nanと無限大を表すinfを使用できる。

非数値nan

nan00で割ると現れる値である。あらゆる値との比較でFalseを返す特殊な値であるため、自分自身との比較でもFalseを返す。そこで、isを用いてnanとの同一性を確認することができる。

from numpy import nan

m = float32(0) / float32(0)
n = m == nan
o = nan == nan
p = m is nan

print(m)
print(n)
print(o)
print(p)

実行結果

nan
False
False
True

無限大値inf

infは絶対値のある値を0で割ることで現れる値である。==を用いた比較でもisを用いた比較でもTrueを返す。

from numpy import inf

q = float(10) / float(0)
r = q == inf
s = q is inf

print(q)
print(r)
print(s)

実行結果

inf
True
True

注意したいリストとの違い

リストとndarray型は共に配列を扱う代表的なデータ型であり、使い方も似ているが、非なる点もあるので注意。

演算子の利用

+演算子は、リスト同士ではリストの結合、ndarray同士では値同士の加算を意味する。整数値との+演算はリストの場合エラーになるがndarrayでは整数値の加算を表す。
*演算子は、リスト同士ではエラーにるが、ndarray同士では値同士の乗算を表す。整数値との*演算はリストの場合はリストの繰り返しを表し、ndarrayでは整数値の乗算を表す。

リストにおける演算子
t = [0, 1, 2]
u = [3, 4, 5]
print(t + u)
# print(t + 2)    エラー
# print(t * u)    エラー
print(t * 2)

実行結果

[0, 1, 2, 3, 4, 5]
[0, 1, 2, 0, 1, 2]

ndarrayにおける演算子
import numpy

v = numpy.array([0, 1, 2])
w = numpy.array([3, 4, 5])
print(v + w)
print(v + 10)
print(v * w)
print(v * 2)

実行結果

[3 5 7]
[10 11 12]
[ 0 4 10]
[0 2 4]

多次元配列

ndarrayはリストとは異なり、各次元の要素の数が異なるデータは作成できない。すなわち、ndarray型で作成するデータは全て行数と列数が一致した多次元配列でなければいけない。長さの異なるリストから二次元配列を作成しようとすると、リストとndarrayでは以下のように異なった挙動を見せる。

import numpy

x = [[0, 1], [2, 3, 4], [5, 6]]
y = numpy.array([[0, 1], [2, 3, 4], [5, 6]])

print(x)
print(y)

実行結果

[[0, 1], [2, 3, 4], [5, 6]]
[list([0, 1]) list([2, 3, 4]) list([5, 6])]

インデックス指定・スライス指定

,:を用いてリストやndarrayの要素を抽出できる。

import numpy

z = numpy.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

print(z[0, 2])    # インデックス0の中のインデックス2
print(z[2, 1:])    # インデックス2の中のインデックス1以降
print(z[ :, 2])   # 全てのインデックスの中のインデックス2

実行結果

2
[7 8]
[2 5 8]

0
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2