3

我想从我的矩阵中删除一个 ( * ) 星号并将该矩阵写出到一个文本文件中,并且剩余的元素将在没有空格或任何类型的分隔符的情况下相互连接。我写了这段代码

for b = 1 : length(out7num_r7_nt_back)
    if ~(out7num_r7_nt_back(b) == '*')
        out7num_r7_back(b) = '';
    end
end
disp(out7num_r7_nt_back);
dlmwrite('my_data.txt',out7num_r7_nt_back, '');

我收到此错误消息:

???要删除的元素索引超出矩阵维度。

4

2 回答 2

1

您可以使用矢量化布尔索引,将循环替换如下:

out7num_r7_nt_back = out7num_r7_nt_back(out7num_r7_nt_back(b) ~= '*');

那也应该快得多。

于 2012-11-12T19:19:01.337 回答
0

forloop( )的上界length(out7num_r7_nt_back)值只计算一次

假设你有'*ab'一个变量。循环将计数到 3(变量的长度)。当程序擦除时,在循环内部'*',您将得到'ab'长度为 2 的内容。由于循环正在迭代到 3,程序将尝试访问超出范围的out7num_r7_nt_back(3)内容。

您可以在向后移动时删除字符:

...
for b = length(out7num_r7_nt_back) : -1 : 1
...

但是你应该更喜欢向量化的方法,因为它写起来更快更干净。

于 2012-11-12T19:02:08.130 回答