Simultaneous changing of python numpy array elements

最后都变了- 提交于 2019-12-25 08:48:11

问题


I have a vector of integers from range [0,3], for example:

v = [0,0,1,2,1,3, 0,3,0,2,1,1,0,2,0,3,2,1].

I know that I can replace a specific values of elements in the vector by other value using the following

v[v == 0] = 5

which changes all appearences of 0 in vector v to value 5. But I would like to do something a little bit different - I want to change all values of 0 (let's call them target values) to 1, and all values different from 0 to 0, thus I want to obtain the following:

v = [1,1,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0]

However, I cannot call the substitution code (which I used above) as follows:

v[v==0] = 1
v[v!=0] = 0

because this obviously leeds to a vector of zeros. Is it possible to do the above substitution in a parralel way, to obtain the desired vector? (I want to have a universal technique, which will allow me to use it even if I will change what is my target value). Any suggestions will be very helpful!


回答1:


You can check if v is equal to zero and then convert the boolean array to int, and so if the original value is zero, the boolean is true and converts to 1, otherwise 0:

v = np.array([0,0,1,2,1,3, 0,3,0,2,1,1,0,2,0,3,2,1])
(v == 0).astype(int)
# array([1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0])

Or use numpy.where:

np.where(v == 0, 1, 0)
# array([1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0])


来源:https://stackoverflow.com/questions/45381983/simultaneous-changing-of-python-numpy-array-elements

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!