3

私は2つの派手な配列を持っています:

a = np.arange(100*100).reshape(100,100)
b = np.random.rand(100, 100)

配列の特定の部分を抽出するためのスライスのタプルもあります。

slice_ = (slice(5, 10), slice(5, 10))

次に、このスライスの特定の部分を選択するための一連のブール インデックスがあります。

indices = b[slice_] > 0.5

これらのインデックスを別の値に設定したい場合は、簡単に実行できます。

a[slice_][indices] = 42

ただし、ブール値インデックスの別のセットを作成して、インデックス付き配列の特定の部分を選択すると、次のようになります。

high_indices = a[slice_][indices] > 700

次に、これらのインデックスで配列の値を設定してみてください。

a[slice_][indices][high_indices] = 42 # Doesn't do anything!

2 つのインデックス配列を一緒に AND する必要があるのではないかと考えましたが、indices形状が異なります。(5, 5)high_indices(12,)

比較的単純なことをしようとして、ここでひどい混乱に陥ったと思います。配列の値を設定できるように、これら 2 つのブール配列を使用してインデックスを作成するにはどうすればよいですか?

4

1 に答える 1

5

numpy 配列をスライスするとビューが返されますが、ブール インデックスは配列のコピーを返します。そのため、 でブール値インデックスを使用して初めてインデックスを作成するa[slice_][indices][high_indices]と、コピーが返され、配列ではなくコピーに値 42 が割り当てられますa。ブールインデックスをチェーンすることで問題を解決できます。

a[slice_][(a[slice_] > 700) & (b[slice_] > 0.5)] = 42
于 2013-09-05T11:03:54.123 に答える