Jua*_*lid 3 python arrays numpy min
假设我们有这个数组,我想用50号替换最小值
import numpy as np
numbers = np.arange(20)
numbers[numbers.min()] = 50
Run Code Online (Sandbox Code Playgroud)
所以输出是 [50,1,2,3,....20]
但是现在我遇到了这个问题:
numbers = np.arange(20).reshape(5,4)
numbers[numbers.min(axis=1)]=50
Run Code Online (Sandbox Code Playgroud)
要得到 [[50,1,2,3],[50,5,6,7],....]
但是我收到此错误:
IndexError:索引8超出轴0的范围,大小为5 ....
有任何帮助的想法吗?
您需要使用numpy.argmin而不是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]])
Run Code Online (Sandbox Code Playgroud)
(我相信我的原始答案是不正确的,我混淆了行和列,这是对的)
| 归档时间: |
|
| 查看次数: |
1152 次 |
| 最近记录: |