0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python NumPy 使い方

Last updated at Posted at 2024-12-07
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]
0
0
0

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?