Генерация квадратной матрицы для вектора с диагоналями в MatLab - PullRequest
2 голосов
/ 06 мая 2019

У меня есть вектор, где каждому значению соответствует диагональ.Я хочу создать матрицу из этого вектора.У меня есть код:

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].

Не могли бы вы помочь мне с другим более быстрым способом создания такой последовательности?

1 Ответ

4 голосов
/ 06 мая 2019

Использование 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...