首页 > 解决方案 > 将方程应用于数组的特定行并将答案连接到数组

问题描述

% 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)中有非零值。我是编码新手,所以对于任何混淆,我深表歉意。任何帮助表示赞赏。

标签: matlab

解决方案


尝试这个:

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 个元素的范数。如果这就是你需要的,我没有从你的问题中弄清楚。


推荐阅读