MATLAB

2016-11-13 14 views
-2

でこの行列を作成するために、どのように私はベクトルのようなMATLAB

A=[4;3;1;6]

を持っていると私はA

B=[6 5 4 3 2 1;4 3 2 1 0 0;3 2 1 0 0 0;1 0 0 0 0 0];

から以下の要素を持つ行列を作成するにはどうすればできますMATLABでこれを行いますか? Aの最大値に等しい列の数。

+1

質問は不明です。 BにはAの要素のインデックスが格納されています(Aには4つの要素しかなく、maltabには0のインデックスがないため)。あなたがAとBの間に行きたいと思っている関係は私には不明です。 –

+1

ループで何が問題になっていますか?ループは非常に便利なものです。この場合、ループはおそらく最も論理的なものです。 – beaker

+0

カラムの数を固定値にするか、Aの最大値にしますか?何か試しましたか?コードはありますか? – beaker

答えて

1

これは、ベクトル化されたものとループ内のものの2つの方法があります。

A=[4;3;1;6]; 
B = max(bsxfun(@minus, sort(A, 'descend'), 0:(max(A)-1)), 0); 

または

S = sort(A, 'descend'); 
m = numel(A); n = S(1); 
C = zeros(m,n); 
for k = 1:m 
    C(k,1:S(k)) = S(k):-1:1; 
end 

結果:

B = 

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