2017-08-31 46 views
0

我有兩個向量在MATLAB,vectorAvectorB - 無論是1280元的長度相等。我想將矢量分成長度爲256的子矢量,給出5個子矢量。分流/片向量爲子向量,並得到他們的規範,沒有一個循環

一旦我有切片,比如sliceAsliceB,我需要在兩個切片上執行norm

此刻,我有以下代碼:

for i = 1:N 
    sliceA = vectorA(i:round(i*1280/N); 
    sliceB = vectorB(i:round(i*1280/N)); 
    distance = distance+norm(sliceA,sliceB); 
end 
distance = distance/N; 

是否有可能使用一些瘋狂的MATLAB邏輯刪除的循環?

回答

2

可以使用reshape使切片的2D矩陣

sliceA = reshape(vectorA, 256, 5); 
sliceB = reshape(vectorB, 256, 5); 

然後計算(歐幾里德)規範和它們的總和爲距離

norms = sqrt(sum((sliceA - sliceB).^2, 1)); 
distance = sum(norms)/5; 

可以在求和任一方向,這取決於你對矢量進行了哪種改變。根據您是否希望的256或5片,你可能要改變sum的​​參數從行總結到跨列求和切換。

norms = sqrt(sum((sliceA - sliceB).^2, 1)); % Sums down rows, slices of 256 
norms = sqrt(sum((sliceA - sliceB).^2, 2)); % Sums across cols, slices of 5 

注意,您不必計算reshape功能的兩個維度。只要你選擇一個值,這是你的向量中元素數量的一個因素,你可以做

sliceA = reshape(vectorA, 128, []); % correct number of slices of 128 
sliceA = reshape(vectorA, [], N); % This would use N how you are in the loop 
+1

你是一個英雄:)謝謝 – Wajih