我有一个相当大的numpy数组,大约1mill。不同数量的数字约为8,编号为1-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]
由于
答案 0 :(得分:5)
这是NumPy数组a == 2
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])
答案 1 :(得分: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]])