0
        for s=1:length(C_tem)
        for w=1:length(C_tem{s})
            if (abs(C_tem{s}{w}) >= 0)
               C_tem{s}{w} = 1;
            else
               C_tem{s}{w} = 0;
            end
          end
        end

0より大きい値を1に設定しようとしていますが、0以下の場合、何らかの理由でこれは機能しません。私はmatlabを初めて使用しますが、可能であれば本当に助けが必要です。前もって感謝します..

4

2 に答える 2

3

私はmatlabにあまり取り組んでいませんが、コードのこの部分は疑わしいと感じています-

if (abs(C_tem{s}{w}) >= 0)
               C_tem{s}{w} = 1;
            else
               C_tem{s}{w} = 0;
            end

なぜここで腹筋をしているのですか?数字から符号を削除すると思います。コードは次のようになります-

if (C_tem{s}{w} > 0) //I have removed abs and >= is replaced with >
               C_tem{s}{w} = 1;
            else
               C_tem{s}{w} = 0;
            end
于 2012-05-21T04:38:05.643 に答える
0

abs(x)>=0x のすべての値に対して真です。簡単な答えは、腹筋を取り除くことです。より完全な回答は、ダンのコメントに続きます。cell 配列は内部レベルでは不要です。代わりに、通常の配列のセル配列がある場合は、コード ブロック全体に対してこれを行うことができます。

for s=1:length(C_tem)
    C_tem{s} = (C_tem{s} >= 0);
end

注意すべき 2 つの点: 比較演算子はベクトル化されます。つまり、入力と同じサイズの行列を返すため、すべての値を一度に比較します。そして、演算子の出力は、真の場合は 1、偽の場合は 0 です。

また、組み込み関数signを見て、それがやりたいことに近いかどうかを確認してください。

于 2012-05-21T13:37:24.993 に答える