将方程式应用于数组的特定行,并将答案连接到数组


% 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

相关内容

  • 没有找到相关文章

最新更新