Can these operations be vectorized?
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
n1=-64:63;
Inter=sinc(n1/9);
Poly=reshape(Inter,8,16);
X=repmat([1,-1],1,10);
for i=1:8
A(i,:)=conv(Poly(i,:),X);
end
So in this small program I am storing in Matrix A, the output of a convolution operation. Each Row of A represents the output for one iteration. Now my Question is can I get this done without using the for loop. Like by using bsxfun or anything? Please suggest.
0 Commenti
Risposta accettata
Andrei Bobrov
il 29 Ott 2012
Modificato: Andrei Bobrov
il 30 Ott 2012
bad variant, so use loop for .. end
s = size(Poly);
n = numel(X);
ii = bsxfun(@minus,ones(s(1),1)*(1:s(2)+n-1),reshape((0:n-1).',1,1,[]));
i01 = ii >= 1 & ii <= s(2);
m = repmat(Poly,[1,1,n]);
out0 = i01 + 0;
out0(i01) = m;
A = sum(bsxfun(@times,out0,reshape(X,1,1,[])),3);
or
s = size(Poly);
n = numel(X);
i1 = tril(fliplr(flipud(tril(true(s(2)+n-1,n)))));
i2 = repmat(reshape(i1,1,s(2)+n-1,[]),s(1),1);
out1 = i2 + 0;
out1(i2) = bsxfun(@times,repmat(Poly,[1,1,n]),reshape(X,1,1,[]));
out = sum(out1,3);
0 Commenti
Più risposte (2)
Sachin Ganjare
il 29 Ott 2012
Modificato: Sachin Ganjare
il 29 Ott 2012
Rather use 'onvmtx' function.
0 Commenti
Vedere anche
Categorie
Scopri di più su Matrix Indexing in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!