2017-12-07 8 views
2

ベクトルANx1です。これはMATLABにあります。私は、このようなことの寸法(N-1) x Nの行列Bを構築したいベクトルをベクトルに変換するコードをベクトルに変換する

N = 5; 
A = [1 
    2 
    3 
    4 
    5]; 


i=1,...,Nため 、B(:,i)行にA1,2,...,i-1,i+1,...,Nが含まれています。上記の例では


B = [2 1 1 1 1 
    3 3 2 2 2 
    4 4 4 3 3 
    5 5 5 5 4] 

このコードは、私が欲しいものを行います。

B=zeros(N-1,N); 
for i=1:N 
    if i>1 && i<N 
     B(:,i)=[A(1:i-1); A(i+1:end)]; 
    elseif i==1 
     B(:,i)=A(i+1:end); 
    elseif i==N 
     B(:,i)=A(1:i-1); 
    end 
end 

しかし、私はそれをvectoriseたいです。どんな助け?あなただけのすべてのN + 1のエントリを削除することができますあなたの例あたり

答えて

1

N=5; 
a=repmat(1:N,1,N); % make an NxN long vector 
a(1:N+1:end)=[]; % delete every N+1 entry 
B=reshape(a,N-1,[]) % reshape to N-1 x N matrix 
4

ここでは簡単なオプションです:

[r, ~] = find(~eye(N)); 
B = reshape(A(r), N-1, N) 
関連する問題