Matlab 从矩阵中删除特定元素

Matlab 从矩阵中删除特定元素,matlab,Matlab,我想从我的矩阵中删除一个(*)星号,并将该矩阵写入一个文本文件,其余的元素将相互连接,没有空格或任何分隔符。我写了这段代码 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_ba

我想从我的矩阵中删除一个(*)星号,并将该矩阵写入一个文本文件,其余的元素将相互连接,没有空格或任何分隔符。我写了这段代码

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, '');
我收到了以下错误消息:

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


循环的
上限值(
长度(out7num\u r7\u nt\u back)
)只计算一次

假设变量中有
'*ab'
。循环将计数为3(变量长度)。在循环内部,当程序擦除
'*'
时,将得到长度为2的
'ab'
。由于循环迭代到3,程序将尝试访问超出边界的
out7num\u r7\u nt\u back(3)

您可以在后退时删除字符:

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

但您应该更喜欢矢量化方法,因为它编写速度更快、更简洁。

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

out7num_r7_nt_back = out7num_r7_nt_back(out7num_r7_nt_back(b) ~= '*');
这也应该快得多