サンプルコード:
import numpy as np
a = np.zeros((5,5))
a[[0,1]] = 1 #(list of indices)
print('results with list based indexing\n', a)
a = np.zeros((5,5))
a[(0,1)] = 1 #(tuple of indices)
print('results with tuple based indexing\n',a)
結果:
results with list based indexing
[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]
results with tuple based indexing
[[ 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]
お気づきのとおり、listを使用して配列にインデックスを付けると、同じインデックスのタプルを使用した場合とは異なる結果が得られました。numpyバージョン1.13.3でpython3を使用しています
リストとタプルを使用してnumpy配列にインデックスを付けることの基本的な違いは何ですか?
意図的に。Numpyのgetitemおよびsetitem構文は、異なる機能をサポートするために異なるタイプが使用されるため、ダックタイプではありません。これは単なる古いもの__setitem__
です:
a[(0,1)] = 1
するのと同じa[0,1] = 1
です。どちらの場合も、ndarrayのsetitemは、インデックスのタプル(0, 1)
と値の2つの引数を受け取ります1
。
a[[0,1]] = 1
これは放送の特殊なケースです。通常は記述されa[0:2] = 1
ますが、たとえば、他の行をスライス/変更することもできますa[[0,1,3]]
。スカラー1
は、割り当ての行0と1のすべての列に「引き伸ばされ」ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加