LoginSignup
0
0

More than 3 years have passed since last update.

【Python3.8~】配列などを定義と同時に書き換える【tips】

Last updated at Posted at 2020-11-22

はじめに

~配列の初期化をコンパクトにしたい~

その願い、実現できます。そう、3.8~ならね。

どうやるか

(変数名 := 定義)[スライス] = 変更

注) スライスしない場合も[:]などとつけないとエラーを吐きます。

例えば

~対角線上に1~9が並んでる正方行列に、3行おきに1を足した行列を定義したい~

そんな謎のシチュエーションもこの通り

import numpy as np
(x:=np.diag(range(10)))[::3] += 1
x
out
array([[ 1,  1,  1,  1,  1,  1,  1,  1,  1,  1],
       [ 0,  1,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  2,  0,  0,  0,  0,  0,  0,  0],
       [ 1,  1,  1,  4,  1,  1,  1,  1,  1,  1],
       [ 0,  0,  0,  0,  4,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  5,  0,  0,  0,  0],
       [ 1,  1,  1,  1,  1,  1,  7,  1,  1,  1],
       [ 0,  0,  0,  0,  0,  0,  0,  7,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  8,  0],
       [ 1,  1,  1,  1,  1,  1,  1,  1,  1, 10]])

例えば

~対角線上に1~9が並んでる正方行列に、自身の左右を反転させた行列を引きたい~

そんな場合もこの通り

import numpy as np
(x:=np.diag(range(10)))[:] -= x[:, ::-1]
x
out
array([[ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  1,  0,  0,  0,  0,  0,  0, -1,  0],
       [ 0,  0,  2,  0,  0,  0,  0, -2,  0,  0],
       [ 0,  0,  0,  3,  0,  0, -3,  0,  0,  0],
       [ 0,  0,  0,  0,  4, -4,  0,  0,  0,  0],
       [ 0,  0,  0,  0, -5,  5,  0,  0,  0,  0],
       [ 0,  0,  0, -6,  0,  0,  6,  0,  0,  0],
       [ 0,  0, -7,  0,  0,  0,  0,  7,  0,  0],
       [ 0, -8,  0,  0,  0,  0,  0,  0,  8,  0],
       [-9,  0,  0,  0,  0,  0,  0,  0,  0,  9]])

さいごに

何気に便利なセイウチ演算子活用シリーズが増えてゆく...

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