簡體   English   中英

在MatLab中生成帶有對角線的矢量的方陣

[英]Generate square matrix for vector with diagonals in MatLab

我有一個向量,其中每個值對應一個對角線。 我想從此向量創建一個矩陣。 我有一個代碼:

x = [1:5];
N = numel(x);
diagM = diag(repmat(x(1),N,1),0);
for iD = 2:N
    d = repmat(x(iD),N-iD+1,1);
    d_pos = diag(d,iD-1);
    d_neg = diag(d,-iD+1);
    d_join = d_pos+d_neg;
    diagM = diagM+d_join;
end

它給了我我想要的東西:

diagM =

     1     2     3     4     5
     2     1     2     3     4
     3     2     1     2     3
     4     3     2     1     2
     5     4     3     2     1

但是實際上變得很慢,例如x=[1:10^4]

您能否以另一種更快的方式幫助我生成這樣的序列?

使用toeplitz

x = 1:5;
diagM = toeplitz(x);

或手動進行矢量化處理:

x = 1:5;
t = 1:numel(x);
diagM = x(abs(t-t.')+1); % x(abs(bsxfun(@minus, t, t.'))+1) in old Matlab versions

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM