如何从数组中获取最小值:
arr = [ 1, 2, 0, 2]
我在想
f_min(a,b) = (a < b) ? a : b
f_mina(arr,n) = do for [ i = 1:n-1] { f_min(arr(i,i+1)) }
但是第二个定义不起作用。我也试过
stats
但它也不适用于数组。
要从 Gnuplot 中的数组中获取最小值,可以结合使用
stats
命令和 using
关键字。
例子:
arr = [ 1, 2, 0, 2]
stats arr using 1 nooutput
print STATS_min
这将输出
0
,这是数组中的最小值。 using 1
告诉 stats
使用数据的第一列(在这种情况下是唯一的列),nooutput
告诉它不要输出任何其他统计信息。
如果你更喜欢使用自定义函数,你可以像这样修改你的
f_mina
函数:
f_min(a,b) = (a < b) ? a : b
f_mina(arr,n) = (n > 1) ? f_min(arr[n], f_mina(arr, n-1)) : arr[1]
arr = [ 1, 2, 0, 2]
print f_mina(arr, |arr|)
这也会输出
0
,这是数组中的最小值。
|arr|
表达式计算数组的长度,f_mina
函数递归地对数组的每个元素应用f_min
函数来寻找最小值。
gnuplot> show version
G N U P L O T
Version 5.4 patchlevel 1 last modified 2020-12-01
Copyright (C) 1986-1993, 1998, 2004, 2007-2020
Thomas Williams, Colin Kelley and many others
gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help FAQ"
immediate help: type "help" (plot window: hit 'h')
gnuplot> array arr = [ 1, 2, 0, 2]
gnuplot> stats arr using 2 nooutput
gnuplot> print STATS_min
0.0
用于绘图和统计目的的数组“列”被解释为
column(1) = index
column(2) = Array[index] (real part)
column(3) = Array[index] (imaginary part, if any)
所以你想要第 2 列的最小值。