replace min value to another in numpy array

好久不见. 提交于 2019-12-13 13:51:39

问题


Lets say we have this array and I want to replace the minimum value with number 50

import numpy as np
numbers = np.arange(20)
numbers[numbers.min()] = 50

So the output is [50,1,2,3,....20]

But now I have problems with this:

numbers = np.arange(20).reshape(5,4)
numbers[numbers.min(axis=1)]=50

to get [[50,1,2,3],[50,5,6,7],....]

However I get this error:

IndexError: index 8 is out of bounds for axis 0 with size 5 ....

Any ideas for help?


回答1:


You need to use numpy.argmin instead of numpy.min:

In [89]: numbers = np.arange(20).reshape(5,4)

In [90]: numbers[np.arange(len(numbers)), numbers.argmin(axis=1)] = 50
In [91]: numbers
Out[91]: 
array([[50,  1,  2,  3],
       [50,  5,  6,  7],
       [50,  9, 10, 11],
       [50, 13, 14, 15],
       [50, 17, 18, 19]])

In [92]: numbers = np.arange(20).reshape(5,4)

In [93]: numbers[1,3] = -5 # Let's make sure that mins are not on same column

In [94]: numbers[np.arange(len(numbers)), numbers.argmin(axis=1)] = 50

In [95]: numbers
Out[95]: 
array([[50,  1,  2,  3],
       [ 4,  5,  6, 50],
       [50,  9, 10, 11],
       [50, 13, 14, 15],
       [50, 17, 18, 19]])

(I believe my original answer was incorrect, I confused rows and columns, and this is right)



来源:https://stackoverflow.com/questions/33794750/replace-min-value-to-another-in-numpy-array

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