import numpy as np
以下numpyをnpと表記
NumPyの主な型
np.array関数でNumPy配列を作る際、引数dtypeで要素のデータ型を指定する
指定しなかった場合は、引数で指定されたデータ内容から自動で指定される
型 | 説明 |
---|---|
int# | #ビットの整数 #には8、16、32、64などを指定 |
float# | #ビットの浮動小数点数 #には8、16、32、64などを指定 |
bool | 真偽値 |
string_ | 固定長の文字列 |
object | Pythonオブジェクト(インスタンス) |
li = np.array([1,2,3], dtype="int16")
NumPy配列のプロパティ
プロパティ | 説明 | 例 |
---|---|---|
dtype | 要素の型 | |
size | 要素の数 | |
nbytes | メモリ消費量(バイト) | |
ndim | 次元数 | 1次元、2次元 |
shape | 行数、列数 | (2,3)は2行、3列の配列 |
li=np.array([[1,2,3],[4,5,6]],dtype="int16")
print(li) # [[1 2 3]
# [4 5 6]]
print(li.dtype) # int16
print(li.size) # 6
print(li.nbytes) # 12
print(li.ndim) # 2
print(li.shape) # (2, 3)
NumPy配列の要素取得
li=np.array([[1,2,3], [4,5,6]], dtype="int16")
print(li[0, 1]) # 2
print(li[1, 2]) # 6
print(li[0, 1:]) # [2 3]
print(li[0, :2]) # [1 2]
print(li[0, :]) # [1 2 3]
NumPy配列の行数列数の変換
変換前と変換後の「行数×列数の値」は同じにする
li=np.array([[1,2,3,4], [5,6,7,8]])
print(li)
print(li.shape)
# [[1 2 3 4]
# [5 6 7 8]]
# (2, 4) 2行4列
li2=li.reshape(4, 2)
print(li2)
print(li2.shape)
# [[1 2]
# [3 4]
# [5 6]
# [7 8]]
# (4, 2) 4行2列
# 行数に-1を指定した場合は、列数を元にして行数は自動で設定される
# この場合は行数4になる
li2 = li.reshape(-1, 2)
print(li2)
[[1 2]
[3 4]
[5 6]
[7 8]]
# 列数に-1を指定した場合は、行数を元にして列数は自動で設定される
# この場合は列数2になる
li2 = li.reshape(4, -1)
print(li2)
[[1 2]
[3 4]
[5 6]
[7 8]]
NumPy配列に要素追加
元の配列と追加する配列の次元数は同じにする
li = np.array([[1, 2, 3], [4, 5, 6]])
li2 = np.append(li, [[7, 8, 9]], axis=0)
print(li2)
[[1 2 3]
[4 5 6]
[7 8 9]]
引数axisを省略すると配列の形状が無くなる
li = np.array([[1, 2, 3], [4, 5, 6]])
li2 = np.append(li, [[7, 8, 9]])
print(li2)
[1 2 3 4 5 6 7 8 9]
初期値を設定したNumPy配列
dtypeを省略した場合は、float64
# 0で初期化
li = np.zeros((2, 3), dtype="float16")
print(li)
[[0. 0. 0.]
[0. 0. 0.]]
# 1で初期化
li2 = np.ones((2, 3), dtype="int16")
print(li2)
[[1 1 1]
[1 1 1]]
# np.emptyは、dtypeの値によって初期値が変わる
li3 = np.empty((2, 3), dtype="int16")
print(li3)
[[15360 15360 15360]
[15360 15360 15360]]
等差数列のNumpy配列作成
# np.arange(開始値, 終了値, 増分)
# 終了値は含まない
li = np.arange(0, 10, 2)
print(li)
[0 2 4 6 8]
# np.linspace(開始値, 終了値, 要素数)
# 開始値から終了値までの要素数の配列を作成
# 終了値は含む
li2 = np.linspace(0, 10, 5)
print(li2)
[ 0. 2.5 5. 7.5 10. ]
条件を指定して要素を取得
li = np.array([1, 2, 3, 4, 5])
# 奇数の要素を取得
print(li[li % 2 == 1])
[1 3 5]
# 奇数の要素のインデックス番号を取得
print(np.where(li % 2 == 1))
(array([0, 2, 4], dtype=int64),)
np.whereは第2引数、第3引数を指定できる
第1引数の条件に一致した場合は第2引数の値を返し、第1引数の条件に一致しない場合は第3引数の値を返す
li = np.array([1, 2, 3, 4, 5])
print(np.where(li % 2 == 1, "奇数", "偶数"))
['奇数' '偶数' '奇数' '偶数' '奇数']
NumPy配列をソート
li = [
[7, 2, 5],
[6, 1, 8],
[9, 4, 3]
]
# 行ごとにソート
print(np.sort(li))
[[2 5 7]
[1 6 8]
[3 4 9]]
# 列ごとにソート
print(np.sort(li, axis=0))
[[6 1 3]
[7 2 5]
[9 4 8]]
NumPy配列を結合
np.hstach 列方向に結合
li = np.array(
[
[1, 2, 3],
[4, 5, 6]
])
li2 = np.array(
[
[10],
[20]
])
# 引数はタプルで指定する
li3 = np.hstack((li, li2))
print(li3)
[[ 1 2 3 10]
[ 4 5 6 20]]
np.vstack 行方向に結合
li = np.array(
[
[1, 2, 3],
[4, 5, 6]
])
li2 = np.array(
[
[10, 20, 30],
[40, 50, 60]
])
# 引数はタプルで指定する
li3 = np.vstack((li, li2))
print(li3)
[[ 1 2 3]
[ 4 5 6]
[10 20 30]
[40 50 60]]
NumPy配列の合計
axis=0: 列ごとの合計
li = np.array(
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
)
print(np.sum(li, axis=0))
[12 15 18]
axis=1: 行ごとの合計
li = np.array(
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
)
print(np.sum(li, axis=1))
[ 6 15 24]
NumPy配列の累積和
axis=0: 列ごとの累積和
li = np.array(
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
)
print(np.cumsum(li, axis=0))
[[ 1 2 3]
[ 5 7 9]
[12 15 18]]
axis=1: 行ごとの累積和
li = np.array(
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
)
print(np.cumsum(li, axis=1))
[[ 1 3 6]
[ 4 9 15]
[ 7 15 24]]
axisを省略した場合は、1次元配列として累積和を計算する
li = np.array(
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
)
print(np.cumsum(li))
[ 1 3 6 10 15 21 28 36 45]