从矩阵中删除特定元素

时间:2012-11-12 18:44:03

标签: 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_back, '');

我收到此错误消息:

  
    

???要移除的元素的索引超过矩阵尺寸。

  

2 个答案:

答案 0 :(得分:1)

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

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

那也应该快得多。

答案 1 :(得分:0)

for循环(length(out7num_r7_nt_back))的上限值仅在 时进行评估!

假设您在变量中有'*ab'。循环将计为3(变量长度)。在程序擦除'*'时循环内部,你将获得长度为2的'ab'。由于循环迭代为3,程序将尝试访问 out out7num_r7_nt_back(3)边界

你可以在倒退时删除字符:

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

但你应该更喜欢矢量化方法,因为它更快更清晰。