np.ones_like, np.zeros_likeでboolアレイの初期化。
覚書です。
なんかであらかじめプリアロケーションしたゼロ行列を作ることはよくありますが、ブーリアンのときはどうやるとスマートなのかと思って調べました。
でFalseの部分を必要に応じて変えて急場をしのいでましたが、
どうせ
と書くべきだし、
がスマートな方法っぽい。
boolに限らずもっと一般的な方法としてはあまり使ったことなかったけどnp.full_likeというのがあって、第二引数の値で満たされた行列を作れる。
または
でいけます。いままでは
array1 = np.zeros((w,h))
なんかであらかじめプリアロケーションしたゼロ行列を作ることはよくありますが、ブーリアンのときはどうやるとスマートなのかと思って調べました。
bool値で満たされた行列の初期化
私の場合、既にあるmyarray
と同じ次元のマスクが欲しい時はmask = np.ones(myarray.shape, dtype=np.bool) * False
でFalseの部分を必要に応じて変えて急場をしのいでましたが、
どうせ
myarray.shape
ってやるならnp.ones_likeをつかってmask = np.ones_like(myarray, dtype=np.bool) * False
と書くべきだし、
ones_like
だとTrueの行列になるのでmask = np.zeros_like(myarray, dtype=np.bool)
がスマートな方法っぽい。
boolに限らずもっと一般的な方法としてはあまり使ったことなかったけどnp.full_likeというのがあって、第二引数の値で満たされた行列を作れる。
mask = np.full_like(myarray, Flase, dtype=np.bool)
または
mask = np.full_like(myarray, True, dtype=np.bool)
nanで満たされた行列の初期化
np.full_like
を使うとnanで満たされた行列の初期化がスマートになります。mask = np.full_like(myarray, np.nan)
でいけます。いままでは
np.ones
にnp.nanをかけていたけどこっちのほうがスマートですね。np.emptyはいつ使うのか
np.zeros
に似たnp.emptyは初期化しないでメモリだけ確保するので、次元とデータ型は正しいが、確保されたメモリに残っているめちゃめちゃな値の行列ができる。全要素を上書きするのが確定している場合にはいいけど、忘れそうで危険なので使わないことにしている。そこまでパフォーマンスにこだわる状況っていまのところあまりない。