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

forループ ( )の上限の値は1 回length(out7num_r7_nt_back)だけ評価されます。

変数が'*ab'あるとします。ループは 3 (変数の長さ) までカウントされます。プログラムが消去すると、ループ内で長さが 2になり'*'ます。'ab'out7num_r7_nt_back(3)

逆方向に移動しながら文字を削除できます。

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

ただし、ベクトル化されたアプローチの方が高速でクリーンに記述できるため、優先する必要があります。

于 2012-11-12T19:02:08.130 に答える