How to quickly fill in a matrix

Hi there,
Does anybody have a "fix" on how to make this function go faster? Essentially, I am trying to fill up the matrix Hpsi using the vector phi in a special way.
Thanks in advance, Andy.
T= 1000;
phi=[1:10];
Hpsi = speye(T);
phi=phi';
pl=length(phi);
for i=1:pl
Hpsi = Hpsi + sparse((i+1):T,1:(T-i),phi(i)*ones(1,T-i),T,T);
end

Antworten (1)

Christine Tobler
Christine Tobler am 17 Dez. 2015

0 Stimmen

Use spdiags:
spdiags(repmat(phi([end:-1:1 1])', T), -10:0, T, T)

2 Kommentare

akkp
akkp am 18 Dez. 2015
I find that your code is slower than what I proposed:
clear all;
clc;
T=1000;
phi=1:10;
pl=length(phi);
disp('my code:');
tic;
Hpsi = speye(T);
for i=1:pl
Hpsi = Hpsi + sparse((i+1):T,1:(T-i),phi(i)*ones(1,T-i),T,T);
end
toc;
disp('your code:');
tic;
Hpsi2 = spdiags(repmat(phi([end:-1:1 1])', T), -10:0, T, T);
toc
my code:
Elapsed time is 0.026569 seconds.
your code:
Elapsed time is 0.042326 seconds.
Sorry, I forgot an input:
spdiags(repmat(phi([end:-1:1 1])', T, 1), -10:0, T, T)

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Deep Learning Toolbox finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 15 Dez. 2015

Kommentiert:

am 18 Dez. 2015

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by