Can these operations be vectorized?

2 visualizaciones (últimos 30 días)
Vinod S
Vinod S el 29 de Oct. de 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.

Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 29 de Oct. de 2012
Editada: Andrei Bobrov el 30 de Oct. de 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);

Más respuestas (2)

Sachin Ganjare
Sachin Ganjare el 29 de Oct. de 2012
Editada: Sachin Ganjare el 29 de Oct. de 2012

José-Luis
José-Luis el 29 de Oct. de 2012
Editada: José-Luis el 29 de Oct. de 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.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by