Numpy配列のAdvanced Indexingは知らないとわけわからなくなる。([], compare, condition, 条件式, fancy indexing )
目的
Keras関連のpythonのコードで、
numpy配列の以下のような処理があり、
test_xxx_prediction[test_xxx_prediction >= 0.5] = 1
※test_xxx_predictionは、numpy配列
numpyの”fancy indexing”というようなものも、知らなかったので、
調査に手間取った。
泥縄式に調べると
numpy配列は、かなり、いろいろなことができることがわかったので、情報共有。
np.array[条件式]
np.array[condition]
ぐらいで検索したが、うまくかからなかった。
Advanced Indexing
以下など、よくわかるのでは?
Advanced Indexing の例
numpy配列では、以下のような処理ができる。
慣れていないと、随所に、わけがわからないところがあるかも。
>>> a = np.array([0.01, 0.62, 3.55, 0.21, 0.91, 0.0, 3.2, 0.33, 0.45, 0.99])
>>> a
array([0.01, 0.62, 3.55, 0.21, 0.91, 0. , 3.2 , 0.33, 0.45, 0.99])
>>> a[a < 0.5] = 1.0
>>> a
array([1. , 0.62, 3.55, 1. , 0.91, 1. , 3.2 , 1. , 1. , 0.99])
>>>
>>> b = np.array([1, 2, 4, 6, 9])
>>> a[b]
array([0.62, 3.55, 0.91, 3.2 , 0.99])
>>>
>>>
numpy配列でなく、リストでは、当然できません。
>>> aaa = [0.01, 0.62, 3.55, 0.21, 0.91, 0.0, 3.2, 0.33, 0.45, 0.99]
>>> aaa
[0.01, 0.62, 3.55, 0.21, 0.91, 0.0, 3.2, 0.33, 0.45, 0.99]
>>> aaa[aaa < 0.5] = 1.0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'list' and 'float'
>>> bbb = [1, 2, 4, 6, 9]
>>> aaa[bbb]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers or slices, not list
>>>
まとめ
調べるのに時間がかかったので、記事に。
関連(本人)
pythonをストレスなく使う!(結局docs.python.orgのreferenceが納得感が高い気が、、、)
pythonをストレスなく使う!(generatorに詳しくなる。since1975らしい。)
pythonをストレスなく使う!(Pythonでは、すべてがオブジェクトとして実装されている)
pythonをストレスなく使う!(Pylintに寄り添う)
pythonをストレスなく使う!(ExpressionとStatement)
英語と日本語、両方使ってPythonを丁寧に学ぶ。
今後
コメントなどあれば、お願いします。
勉強します、、、、
Author And Source
この問題について(Numpy配列のAdvanced Indexingは知らないとわけわからなくなる。([], compare, condition, 条件式, fancy indexing )), 我々は、より多くの情報をここで見つけました https://qiita.com/enoughspacefor/items/cc5a9eb490d1a1afd1cb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .