2012-11-12 205 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) ~= '*'); 

這應該是更快的爲好。