我在MATLAB中有两个向量,vectorA
和vectorB
- 两个长度相等的1280个元素。我想将矢量分成长度为256的子矢量,给出5个子矢量。
获得切片后,请说sliceA
和sliceB
,我需要在两个切片上执行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逻辑来移除循环?
答案 0 :(得分: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的切片,您可能希望更改DIM
的{{1}}参数,以便从汇总行切换到列之间的求和。
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