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
nbscales:-1:2
生成数字 6 到 2,步进 -1(即,
6 5 4 3 2
).
nbscales-(nbscales:-1:2)
取反向量 nbscales:-1:2
并将每个元素加 6 得到 0 1 2 3 4
.
ceil((nbscales-(nbscales:-1:2))/2)
取前一个向量,除以 2 并将每个元素四舍五入到下一个整数,得到 0 1 1 2 2
.
2.^(ceil((nbscales-(nbscales:-1:2))/2))
采用前一个向量并将其中的每个元素加 2,得到 1 2 2 4 4
nbangles_coarse .* 2.^(ceil((nbscales-(nbscales:-1:2))/2))
将每个元素乘以 8 得到 8 16 16 32 32
(*
产生与 .*
相同的结果)。
- 最后,
[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_coarse
和 nbscales
的所有标量值产生相同的结果。
我不熟悉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
nbscales:-1:2
生成数字 6 到 2,步进 -1(即,6 5 4 3 2
).nbscales-(nbscales:-1:2)
取反向量nbscales:-1:2
并将每个元素加 6 得到0 1 2 3 4
.ceil((nbscales-(nbscales:-1:2))/2)
取前一个向量,除以 2 并将每个元素四舍五入到下一个整数,得到0 1 1 2 2
.2.^(ceil((nbscales-(nbscales:-1:2))/2))
采用前一个向量并将其中的每个元素加 2,得到1 2 2 4 4
nbangles_coarse .* 2.^(ceil((nbscales-(nbscales:-1:2))/2))
将每个元素乘以 8 得到8 16 16 32 32
(*
产生与.*
相同的结果)。- 最后,
[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_coarse
和 nbscales
的所有标量值产生相同的结果。