NumPyメモ

リファレンス

ndarray.T
次元が2以上のとき行と列を入れ替える

numpy.arange([start, ]stop, [step, ]dtype=None)

numpy.where(condition[, x, y])
condtionは配列でconditionの値がTrueならx, Falseならyの値を採用した配列を返す

numpy.in1d(ar1, ar2, assume_unique=False, invert=False)
ar1の要素がar2に存在するかを真偽値の配列で返す

ndarray.reshape(shape, order=’C’)
配列を指定した行列に変換する
arr.reshape((3, 3))

numpy.cumsum()
配列の値を積算した配列を返す

numpy.searchsorted(a, v, side=’left’, sorter=None)
指定した値はソート済み配列のどこに入るか

numpy.sqrt(x[, out])
配列の各要素の平方根を値にした配列を返す

numpy.maximum(x1, x2[, out])
指定した配列の各要素の大きいほうを要素にした配列を返す

data = numpy.array([1,2,3])
data * 10
# [10, 20, 30]
data + data
# [2, 4, 6]
data.shape
# [1, 3]
a = numpy.array([[1,2,3], [4,5,6]])
a * a
# [[1, 4, 9], [16, 25, 36]]
a - a
# [[0, 0, 0], [0, 0, 0]]
1 / a
# [[1, 0.5, 0.333], [0.25, 0.2, 0.1666]]
a ** 2
# [[1, 4, 9], [16, 25, 36]]



# スライス
# 下記2つは同じ
a[0][1]
a[0, 1]
a[0] = 7
a
# [[7,7,7], [4,5,6]]
下記2つは同じ
a[0] = 0
a[0, :]
# [[0,0,0], [4,5,6]]
b = numpy.arange(10)
# [0,1,2,3,4,5,6,7,8,9]
b[1:3]
# [1,2]
b[1:3] = 99
# 元のデータを上書きしている。(ブロードキャスト)
# [0,99,99,99,4,5,6,7,8,9]
# NumPyのスライスはコピーではない
# コピーしたい場合は下記のようにする
c = numpy.array([[1,2,3], [4,5,6], [7,8,9]])
c[1:2, 0:2]
# [4, 5]
c[1:2, 0:2] = 0



# 多次元配列を配列で抜き出す
# コピー
g = numpy.arange([[0,1,2,3,4], [5,6,7,8,9], [21,22,23,24,25]])
g[[2, 0, 1], [4, 1, 2]]
# [24, 1, 7]
g[[2, 0, 1]][:, [4, 1, 2]]
# [[25, 22, 23], [4, 1, 2], [9, 6, 7]]
# 上記と等価
g[numpy.ix_([2, 0, 1], [4, 1, 2])]



# booleanの配列で抜き出す
# 抜き出す出された値は参照ではなくコピー
d = numpy.arange(5)
# [0,1,2,3,4]
e = d > 2
# [False,False,False,True,True]
d[e]
# [3, 4]
f = numpy.arange([[0,1,2,3,4], [5,6,7,8,9], [21,22,23,24,25]])
f[numpy.array([False, True, True]), e]
# [[8, 9], [24, 25]]
# &や|でandやorをあらわす
g = (d > 1) & (d < 4)
# 配列をインデックスに指定すると配列の要素の値順でデータが返る
h = [[0], [1], [2], [3], [4], [5], [6]]
h[[6,0,2]]
# [[6], [0], [2]]



# キャスト
data.dtype
# dtype(int64)
data.astype('float64')
data.dtype
# dtype(float64)
data.astype(foo.dtype)
data.astype(numpy.int64)



# 配列の生成
numpy.zeros((2, 3))
numpy.empty((2, 3))
numpy.arange(5)



a = numpy.arange(9).reshape(3, 3)
a.mean()
# 4
a.mean(axis=0)
# [3, 4, 5]
a.mean(axis=1)
# [1, 4, 7]

# Trueは1、Falseは0と扱われる
b = numpy.array([True, False, True, False, False])
b.sum()
# 2
b.any()
# True
b.all()
# False
# 0以外がTrue



# ソート
a = numpy.arrange(9).reshape(3, 3)
a[0] = 7
a[:, 0] = 9
a
# [[9,7,7],[9,4,5],[9,7,8]]
a.sort(0)
# [[9,4,5],[9,7,7],[9,7,8]]
a.sort(1)
# [[7,7,9],[4,5,9],[7,8,9]]

a = numpy.array([5, 3, 1, 2, 4, 3, 5, 2, 1])
a.unique()
# [1, 2, 3, 4, 5]



# バイナリで保存
a = numpy.arange(10)
numpy.save("a", a)
a = numpy.load("a.npy")
b = numpy.arange(5, 10)
# zip
numpy.savez("d", data1=a, data2=b)
d = numpy.load("d.npz")
a = d['data1']
b = d['data2']

#テキストの読み込み
a = numpy.loadtxt('foo.txt', delimiter=',')


# 配列の次元数
data = numpy.array([[[1]]])
data.ndim
# 3



# 内積
a = numpy.array([[1,2,3], [4, 5, 6]])
numpy.dot(a, numpy.ones(3))
# [6, 15]

# 標準正規分布の2 x 4の行列
np.random.randn(2, 4)