Can these operations be vectorized?

1 Ansicht (letzte 30 Tage)
Vinod S
Vinod S am 29 Okt. 2012
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.

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 29 Okt. 2012
Bearbeitet: Andrei Bobrov am 30 Okt. 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);

Weitere Antworten (2)

Sachin Ganjare
Sachin Ganjare am 29 Okt. 2012
Bearbeitet: Sachin Ganjare am 29 Okt. 2012

José-Luis
José-Luis am 29 Okt. 2012
Bearbeitet: José-Luis am 29 Okt. 2012
There are ways, but it will probably be slower. For loops are not necessarily bad. Look at the answer here for a problem similar to yours.

Kategorien

Mehr zu MATLAB finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by