2012-11-12 176 views
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, ''); 

我得到这个错误信息:

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

回答

0

的上限for环(length(out7num_r7_nt_back))的价值仅一次被评价过!

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

而退步,您可以删除字符:

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

但是,你应该更喜欢向量化的方法,因为它的速度更快和更清洁的编写。

1

您可以使用矢量布尔指数,替代了循环如下:

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

这应该是更快的为好。