忍者ブログ

!===== implicit none

設計と実装を同時にやるのは…やめようね!!(血涙)

numpy.whereの使い方

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

numpy.whereの使い方

近頃計算結果を出力する際にnumpy.whereを使うようになって、便利さをなんとなく感じていたものの、あんま中身は理解できていないし、使うたびに割とエラー出るし、あんまちゃんと使いこなせていない感。
とりあえず公式ページ見てみるものの、何を言っているのかよくわからん。

公式を見ると、引数は三つあって、
・第1引数のみだとcondition.nonzero()とおなじ働きをする
・第2引数(x)、第3引数(y)もあると、条件が真のxの要素に加えて、残りはyの要素を含むような配列を返す
とのことらしい。

物は試しということで、とりま第1引数のみを考えて、例えば

>>> import numpy as np
>>> x = np.linspace(0,10,5)
>>> x
array([0., 2.5, 5., 7.5, 10.])

と配列を適当に作っておいて

>>> a = np.where(x>4)

とするとaの中身は

>>> a
(array([2,3,4]),)

となっていた。当然(?)だけどa[0]は

>>> a[0]
array([2,3,4])

となっているが、その一方でa[1]を表示しようとするとtuple index out of rangeになってしまうんおgggg。
一応確認ということでtupleの長さを返すlenを使ってみると

>>> len(a)
1

と返してきた。確かにa[1]は存在せぬ様子。
このあたりのタプルなのかndarrayなのかはっきりしない感じが個人的に理解できていなかったが、こうしてちゃんと見てみるとよくわかった!(気がする)
何にせよここまでのまとめとして、np.where()に第1引数のみを与えるとタプルが帰ってきて、ある条件を満たす配列番号のndarrayを返してほしければ

>>> a = np.where(x>4)[0]
>>> a
array([2,3,4])

とその[0]番目のタプルを指定すれば返してくれる。
また、元の配列のうち、ある条件を満たす配列のみから構成される配列を返してほしければ

>>> a = x[np.where(x>4)[0]]
>>> a
array([5., 7.5, 10.])

上記の[0]番目のタプルを元の配列の要素に与えることで返してくれる。
多次元配列になっても同じようにできた。


第2引数、第3引数の機能もついでに確認してみる。
例えば次のように入力してみると、

>>> b = np.where(x>4, x, 0)
>>> b
array([0., 0., 5., 7.5, 10.])

と返してきた。
すなわち第2引数の配列のうち、第1引数の条件を満たさない要素の位置の値を第3引数にして、第1引数の条件を満たす要素はそのままにした配列、を返すっぽい。

当たり前やけど公式に書いてある内容の通りやん、
結局、読解力が足りなかったって話かな。。。
PR

コメント

プロフィール

HN:
NoName
性別:
男性
職業:
おっさん
趣味:
無趣味
自己紹介:
すーぱーぷろぐらまー()になりたい

スポンサードリンク

スポンサードリンク

P R

リンク