2

Wサイズの 3 次元行列があり160x170x18、W 内の連続する各行列の差を計算したいと考えています。

たとえばdiff1 = W(:,:,1) - W(:,:,2)diff2 = W(:,:,2) - W(:,:,3)など...

次に、結果の行列のいくつかの特別な部分を選択したいと思います。たとえば:

NewDiff1 = [diff1(20:50,110:140); diff1(60:90,110:140)];

他の行列についても同じことが言えます。最後に、各行列の平均と誤差を次のように計算します。

mean1 = mean(mean(NewDiff1));
er1 = 0.1-abs(mean1);

私はこれを各行列に対して単独で行うことに成功しましたが、for ループで一度に行うことを好みます。

4

2 に答える 2

4

表現

diff1 = diff(W,1,3)

あなたの例では、160*170*17行列 whereを返しますがdiffW(:,:,1) = W(:,:,2) - W(:,:,1)、これはあなたが望むものではありません。しかし

diff1 = (-1)*diff(W,1,3)

私の計算が良ければ、あなたが望む違いが得られます。そこから、次のようなものが必要です。

newdiff1 = [diff1(20:50,110:140,:);diff1(60:90,110:140,:)];

means = mean(mean(newdiff1));
er1 = 0.1 - abs(mean1);

使用しているサイズのマトリックスでこれを完全にテストしていませんが、小さなテストでは問題なく動作するようです。

于 2012-10-09T12:54:39.690 に答える
1

行列をセル配列に格納してから、セル配列の内容をループして、同じ差分ロジックをそれぞれに適用します。特定の位置にあるセル{}を取得するのではなく、セル配列で構文を使用して内容を取得するように注意してください。()

于 2012-10-09T12:39:39.903 に答える