1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

あなたの知らない(かもしれない)numpyライフハックの世界

Last updated at Posted at 2023-10-20

はじめに

全世界80億のnumpyユーザーの皆さんこんにちは。この記事ではnumpyを扱い始めたばかり、もしくは今までなんとなくnumpyを使い続けてきた人向けにnumpyの痒い所に手が届く機能をご紹介します。

単位行列

M = np.eye(3) # 3 x 3の単位行列を生成
print(M)
実行結果
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

対角要素の取得

M = np.arange(9).reshape(3, 3)
print(M)
M = np.diag(M)
print(M)
実行結果
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[0 4 8]

ゼロ以下の要素をすべて0にする

M = np.arange(-4, 4)
print(M)
M[M < 0] = 0 # 0以下の要素を0に
print(M)
実行結果
[-4 -3 -2 -1  0  1  2  3]
[0 0 0 0 0 1 2 3]

ゼロでない要素のインデックスの取得

M = np.arange(9)
print(M)
M = np.nonzero(M) # ゼロでない要素のインデックスのリストを作成
print(M)
実行結果
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
(array([1, 2, 3, 4, 5, 6, 7, 8], dtype=int64),)

条件に合致する要素のインデックスを取得

M = np.arange(-4, 4)
print(M)
M = np.where(M < 0) # 0未満の要素のインデックスを取得
print(M)
実行結果
[-4 -3 -2 -1  0  1  2  3]
(array([0, 1, 2, 3], dtype=int64),)

配列の累積和を取得

M = np.arange(9)
print(M)
M = np.cumsum(M)
print(M)
実行結果
[0 1 2 3 4 5 6 7 8]
[ 0  1  3  6 10 15 21 28 36]

既存の配列の周囲を任意の値で埋める

M = np.arange(9).reshape(3, 3)
print(M)
M = np.pad(M, pad_width=1, mode='constant', constant_values=-1) # 配列Mの周囲1マスを-1で埋める
print(M)
実行結果
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[-1 -1 -1 -1 -1]
 [-1  0  1  2 -1]
 [-1  3  4  5 -1]
 [-1  6  7  8 -1]
 [-1 -1 -1 -1 -1]]

配列の要素を一定の範囲に収める

M = np.arange(9)
print(M)
M = np.clip(M, 2, 5) # 要素を2から5の範囲に収める
print(M)
実行結果
[0 1 2 3 4 5 6 7 8]
[2 2 2 3 4 5 5 5 5]

参考記事

100 Numpy Exercises
NumPy日本語公式サイト

1
3
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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?