MATLAB 到 C++ 代码行转换

MATLAB to C++ code row conversion

我不熟悉matlab,请帮我将下面代码片段的第三行转换成C++。
(我用谷歌搜索 .* 是按元素乘积,(nbscales:-1:2) 是冒号运算符(像 linspace),
但仍然卡住了)。

nbangles_coarse = 8; % just number, not data structure
nbscales = 6; % just number, not data structure

% please explain meaning of the next row
nbangles = [1, nbangles_coarse .* 2.^(ceil((nbscales-(nbscales:-1:2))/2))];

创建了哪个数据结构?矩阵还是向量?

这是一个数组:

exp_arr = (nbscales:-1:2)
ans =
      6     5     4     3     2
exp_halved_arr = (nbscales-exp_arr)/2
ans =

     0    0.5000    1.0000    1.5000    2.0000
exp_halved_ciel_arr = ceil(exp_halved_arr)
ans = 
      0     1     1     2     2
arr_elementwise_exp = 2.^exp_halved_ciel_arr
ans =
      1     2     2     4     4
scaled_arr = nbangles_coarse .* arr_elementwise_exp
ans =
     8    16    16    32    32
% concatenate 1 at the beginning of the array
nbangles = [1, scaled_arr ]
ans = 
      1     8    16    16    32    32
  1. nbscales:-1:2 生成数字 6 到 2,步进 -1(即, 6 5 4 3 2).
  2. nbscales-(nbscales:-1:2) 取反向量 nbscales:-1:2 并将每个元素加 6 得到 0 1 2 3 4.
  3. ceil((nbscales-(nbscales:-1:2))/2) 取前一个向量,除以 2 并将每个元素四舍五入到下一个整数,得到 0 1 1 2 2.
  4. 2.^(ceil((nbscales-(nbscales:-1:2))/2)) 采用前一个向量并将其中的每个元素加 2,得到 1 2 2 4 4
  5. nbangles_coarse .* 2.^(ceil((nbscales-(nbscales:-1:2))/2)) 将每个元素乘以 8 得到 8 16 16 32 32* 产生与 .* 相同的结果)。
  6. 最后,[1, nbangles_coarse .* 2.^(ceil((nbscales-(nbscales:-1:2))/2))] 只是将 1 附加到该向量的开头以产生 1 8 16 16 32 32

请注意,[1, nbangles_coarse * 2.^ceil((0:(nbscales-2))/2)]nbangles_coarsenbscales 的所有标量值产生相同的结果。