5

たとえば、行列の対角要素を省略するコードが必要です。

A =

[1 2 3;
 1 2 3;
 1 2 3];

出力は次のとおりです。

[2 3;
 1 3;
 1 2];

どうすれば簡単にできますか(長いものは知っていますが、簡単にする必要があります)

4

3 に答える 3

5

これが1つの解決策です:

Alower = tril(A, -1);
Aupper = triu(A,  1);
result = Alower(:, 1:end-1) + Aupper(:, 2:end)

デモ:

> A = [1 2 3; 1 2 3; 1 2 3]
A =

   1   2   3
   1   2   3
   1   2   3

> tril(A, -1)(1:end, 1:end-1) + triu(A, 1)(1:end, 2:end)
ans =

   2   3
   1   3
   1   2
于 2012-07-29T14:22:44.263 に答える
3

nby nmatirxの対角線を削除した後、2つの可能性があることに注意してください。

  1. 余波行列が(あなたの質問のように)byである場合、次の方法でそれを行うことができますnn-1

    A=A';
    A(1:n+1:n*n)=[];
    A=reshape(A,n-1,n)';
    
  2. 余波行列がn-1byの場合、次のnように実行できます。

    A(1:n+1:n*n)=[];
    A=reshape(A,n-1,n);
    
于 2012-07-29T14:30:07.560 に答える
0

これが別の方法です

reshape(A(setdiff(1:9,1:4:9)),[3,2])
于 2012-07-29T14:26:12.510 に答える