% Example
array = [1 2 3 4 5 6 0 0 0];
for i = 1:length(array)
if i(1) ~= 0
array_mag_1 = sqrt(array(1)^2 + array(2)^2 + array(3)^2);
if exist('array_mag_1','var') == 1
new_array = array_mag_1;
end
elseif i(4) ~= 0
array_mag_2 = sqrt(array(4)^2 + array(5)^2 + array(6)^2);
if exist('array_mag_2', 'val') == 1
new_array = cat(array_mag_1, array_mag_2);
end
elseif i(7) ~= 0
array_mag_3 = sqrt(array(7)^2 + array(8)^2 + array(9)^2);
if exist('array_mag_3', 'val') == 1
new_array = cat(array_mag_1, array_mag_2, array_mag_3);
end
end
end
for j = 1:length(new_array)
if j > 0
cat_new_array = new_array(j);
else
return
end
end
取3个元素的集合(如果它是非零的(,找到幅度,并将其连接到"cat_new_array",然后跳过剩余的零,最好的方法是什么?我还发现它保留了第一个"array_mag_1",即使它在数组(4(中有非零值。我是编码的新手,所以我对任何混淆表示歉意。感谢您的帮助。
试试这个:
array = [1 2 3 4 5 6 8 9 7 0 0]
array_non_zero = find(array);
cat_new_array = [];
for i=1:floor(numel(array_non_zero)/3)
cat_new_array = [cat_new_array, norm(array(array_non_zero((i-1)*3+1:i*3)))]
end
该代码从数组3乘3取非零元素,并计算每组3个元素的范数。我没有从你的问题中弄清楚这是否是你需要的。
使用内置函数vecnorm计算数组每行的向量范数,使用非零值函数仅获得非零值。
A = [1 2 3;4 5 6;0 0 0;7 8 9;0 0 0];
cat_new_array = nonzeros(vecnorm(A,2,2))
> cat_new_array =
> 3.7417
> 8.7750
> 13.9284