2015-08-18 67 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