1

私はかなり大きい、約1ミルのゴツゴツした配列を持っています。明確な番号の数は、1から8までの番号が付けられた約8です。

番号2を指定して、2をすべて1に、残りを0に再コーディングしたいとします。

i.e. 
2==>1
1345678==0

Is there a pythonic way to do this with numpy?


[1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8]=> [0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0]

ありがとう

4

2 に答える 2

5

a == 2これは、NumPy配列の結果ですa

>>> a = numpy.random.randint(1, 9, size=20)
>>> a
array([4, 5, 1, 2, 5, 7, 2, 5, 8, 2, 4, 6, 6, 1, 8, 7, 1, 7, 8, 7])
>>> a == 2
array([False, False, False,  True, False, False,  True, False, False,
        True, False, False, False, False, False, False, False, False,
       False, False], dtype=bool)
>>> (a == 2).astype(int)
array([0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

その場で変更したい場合a、それを行う最も効率的な方法は、以下を使用することnumpy.equal()です。

>>> numpy.equal(a, 2, out=a)
array([0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
于 2012-08-09T12:07:45.003 に答える
4

私はおそらくこれに使用np.whereします:

>>> import numpy as np
>>> a = np.array([[1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8]])
>>> np.where(a==2, 1, 0)
array([[0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]])
于 2012-08-09T12:09:32.770 に答える