2015-08-18 69 views
1

我对matlab不熟悉,请帮我将下面的代码片段的第三行转换为C++。
(我GOOGLE了这*是元素之积,(nbscales:-1:2)是冒号运算符(如linspace),
但仍然是stucked)。MATLAB到C++代码行转换

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))]; 

哪个数据结构被创建?矩阵还是矢量?

+0

默认情况下'[nbscales:-1:2]'创建一个行向量。但我总是喜欢一维向量是列向量。 – user3528438

+0

如果您有Matlab或Octave,您可以一次一个地复制/粘贴该代码行的每个部分,然后运行它并查看它的功能。 – Carlton

回答

2
  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至它的每个元件中,通过8得到1 2 2 4 4
  5. nbangles_coarse .* 2.^(ceil((nbscales-(nbscales:-1:2))/2))乘以每个元件得到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所有标值相同的结果。

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