Matlab 超出删除范围是为什么

img

想要去除阵列中的0⃣️,不知道为什么这样子总是索引超出删除范围

根据参考资料,出现索引超出删除范围的问题可能是因为在删除0时使用了循环,而在删除过程中出现了数组长度不足的情况。解决方法是将需要删除的数据全部改为新数据,在这个过程中避免使用循环来删除。

以下是删除0时使用循环出现索引超出删除范围问题的一个例子:

A = [1 0 2 0 3 0];
num = length(A);
for i = 1:num
    if A(i) == 0
        A(i) = [];
    end
end

在上述例子中,循环执行过程中删除了0元素,导致了数组长度的不一致。

改进方法是先将需要删除的元素修改为新数据,再使用非循环的方式删除:

A = [1 0 2 0 3 0];
A(A==0) = NaN;
A = A(~isnan(A));

在上述修改后的代码中,先将0元素修改为NaN,再使用非循环的方式删除NaN元素。

另外,还可以使用空矩阵的方式删除矩阵元素,具体的方法可以参考参考资料中的段落1、段落11和段落13。


for i=1:1:10
    if rem(i,2)==0
        a(i)=NaN;
    else
        a(i)=2^i;
    end
end

a