我刚开始学习Numpy(和Scipy)。我写了一个程序来计算f(x)函数的绘图点。 (f(x)不能明确给出,因为我必须在数值上求解每个点的方程。)我把这些值放在一个二维数组中:
[[x1, x2, x3, ...],
[f(x1), f(x2), f(x3), ...]]
我的目标是找到f(x)函数的最大值,并获得它的位置xm和它的值f(xm)。当然我可以很容易地做到这一点,但这似乎是NumPy肯定有一个简单的功能。我发现的唯一的东西是numpy.amax
,但它只返回每个轴的最大值。 (例如numpy.amax([[1,3,2],[5,7,9]],轴= 1)返回[3,9]。)。
我有两个问题:
是否有内置的NumPy / SciPy函数来查找数据集的最大值?
这是相关代码的一部分:
def get_max(args):
ti_0 = sp.pi / 2.0 + 1E-10
ti_max = sp.pi - 1E-10
iters = 10000
step = (ti_max - ti_0) / iters
ti = ti_0
result = np.empty((2, iters), float_) #the dataset, aim is to find the point where ret_energy is maximal
for i in range(0, iters):
tret = find_return_time(x, ti)
ret_energy = ekin(tret, ti)
ret_time = tret / sp.pi
result[i, 0] = ret_time
result[i, 1] = ret_energy
ti += step
emax = None
#emax = find_maximal_return_energy(result) #-> ???
return emax
答案 0 :(得分:2)
您可以使用argmax功能:
data = np.array([[2, 4, 6, 8],[1, 3, 9, 7]])
x = data[0,:]
f = data[1,:]
i = np.argmax(f)
print x[i], f[i]
打印(6,9)为具有最大值f(x)的(x,f(x))对。请注意,argmax
仅返回第一次出现的最大值。如果f
的最大值有可能出现多次,并且您希望所有值都为x
,那么您可以
maxvalue = np.max(f)
print x[f == maxvalue], maxvalue
答案 1 :(得分:1)
1 - 我想是的
2 - argmax返回最大值的索引,以便您可以检索该值及其相应的x值。
idx = result[1].argmax()
xm = result[0,idx]
fxm = result[1,idx]