我正在尝试用C ++编写基于matlab代码的程序,但我不理解一些语法,我不习惯动态编程 -
[~, min_index] = min(new_energy(min_l,L_a(min_l):L_b(min_l)));
min_index = L_a(min_l) + min_index - 1; % correct index in the entire image
其中'new_energy'是一个矩阵。
我的问题是:
1.你如何找到一个学期的分数(在第一行)?好像我不明白这一点:记谱法。
2.那么[〜,min_index]是什么意思?
答案 0 :(得分:3)
在MATLAB中,冒号符号:
表示我们指的是一系列值或只是一组值。
冒号运算符用于生成一系列值,例如1:5
将返回数组[1 2 3 4 5]
。阅读有关冒号运算符here的更多信息。
所以L_a(min_l):L_b(min_l)
是一系列值。例如,假设L_a(min_l)
的值 10 且L_b(min_l)
的值 20 ,则结果范围为:
[10 11 12 13 14 15 16 17 18 19 20]
。
现在,矩阵上的括号运算符(index operator)用于访问更大矩阵的子矩阵。它需要一个整数或一个整数范围来指定我们想要访问的子矩阵的范围。所以在以下一行
new_energy(min_l, L_a(min_l):L_b(min_l))
我们正在从new_energy
矩阵中选择一个子矩阵。该子矩阵实际上是矩阵的行号min_l
以及该范围指定的所有列,如前所述。因此,通过执行此语句,我们将矩阵的一行作为输出。
接下来,我们在刚提取的行上执行MATLAB的min
函数。
MATLAB的min函数的变体可以返回最小值以及范围内该最小值的索引。
[minValue, indexOfMinValue] = min(...);
如果MATLAB函数返回多个值,并且我们指定~
来代替返回变量,则意味着我们不需要该结果,并且该函数不返回该值。
[~,min_index]
表示我们只得到最小值的索引而不是最小值本身,因为我们已经指定我们不需要它。