8

1 と 0 のランダムな広がりを含む numpy 配列があります。すべての 1 を 0 に、すべての 0 を 1 に置き換えたい。

arr[arr == 0] = 2
arr[arr == 1] = 0
arr[arr == 2] = 1

現在、すべての 0 が 1 になり、その後配列全体が 0 でいっぱいになるのを避けるために、一時的な値 (この場合は 2) を使用する必要があります。これを行うためのよりエレガントで効率的な方法はありますか?

4

5 に答える 5

3

特定の値については、ビット単位の xor と 1 を使用します。

In [19]: a=np.random.randint(2, size=10)

In [18]: a
Out[18]: array([1, 1, 1, 1, 1, 1, 0, 0, 1, 1])

In [19]: a^1
Out[19]: array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0])

int 型のより一般的なソリューション。

In [62]: convert=np.array([1,0])

In [63]: convert[a]
Out[63]: array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0])

「convert」配列の内容を変更すると、値の範囲をマップできることを意味します。結果は、配列 'convert' へのインデックスとして配列 'a' の内容を使用します。

于 2018-11-19T21:49:39.970 に答える