0

(1:10),<10 x 1> double の行列 (a) があります。値をコピーして、列ごとに別のマトリックス変数に再配置したいと思います。(b)。以下の例を参照してください。また、このタスクで最も効率的な方法はどれですか?

matrix a    matrix b

1            1
2            2  2
3            3  3  3  
4            4  4  4  4
5            5  5  5  5  5
6            6  6  6  6  6  6
7            7  7  7  7  7  7  7
8            8  8  8  8  8  8  8  8
9            9  9  9  9  9  9  9  9  9
10           10 10 10 10 10 10 10 10 10 10

更新: こんにちは、アムロです。コピーする値を定義したい場合はどうですか。以下の例を参照してください。

matrix a    matrix b
column:      1  2  3  4  5  6  7

1            1
2            2  2
3               3  3  
4                  4  
5                     5  
6                     6     
7                        7  
8                        8     
9                           9  
10                         10 10 
4

2 に答える 2

2

試す:

>> a = (1:10)'
a =
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10

>> b = tril(repmat(a,1,10))
b =
     1     0     0     0     0     0     0     0     0     0
     2     2     0     0     0     0     0     0     0     0
     3     3     3     0     0     0     0     0     0     0
     4     4     4     4     0     0     0     0     0     0
     5     5     5     5     5     0     0     0     0     0
     6     6     6     6     6     6     0     0     0     0
     7     7     7     7     7     7     7     0     0     0
     8     8     8     8     8     8     8     8     0     0
     9     9     9     9     9     9     9     9     9     0
    10    10    10    10    10    10    10    10    10    10
于 2012-06-21T06:33:45.377 に答える
1

指定した 2 番目のマトリックスでエラーが発生したと思います。私はあなたがこのようなことをしたいと思っていると仮定しています:

b =

 1     0     0     0     0     0
 2     2     0     0     0     0
 0     3     3     0     0     0
 0     0     4     4     0     0
 0     0     0     5     5     0
 0     0     0     0     6     6

これは簡単です:

%define vector of arbitrary length
a=1:6;
%generate b with shifted diagonal matrices
b=diag(a)+diag(a(2:end),-1);

diag の 2 番目の引数は、結果の対角線をシフトするだけです。

于 2012-06-21T07:31:12.850 に答える