Google Группы больше не поддерживают новые публикации и подписки в сети Usenet. Опубликованный ранее контент останется доступен.

Pointwise multiplication of matrix with vector

1 712 просмотров
Перейти к первому непрочитанному сообщению

Marius

не прочитано,
27 янв. 2006 г., 08:58:1527.01.2006
Hello,

In Matlab one can write
c = 3; % (some scalar)
x = 0:10; % (some vector)
y = c * x; % (multiply every component of x with c)

This is much faster than using a for loop and writing
for k = 1:length(x)
y(k) = c * x(k);
end

I would now like to do a similar thing, but where the scalar is
replaced by a n x 1 vector and the vector is replaced by a n x m
matrix. I.e., I would like to multiply each column of a matrix
pointwise with a column vector.

So far I can see two solutions for this (besides a double for loop):

1. Use repmat to create m copies of the colum vector and multiply the
resulting matrix pointwise with the original matrix:

% Given a vector v (n x 1) and matrix A (n x m):
V = repmat(v, 1, m);
B = A .* V;

2. Use a for loop to go through each element of the vector and thus
reduce to the problem to the <scalar> * <vector>
situation:

for k = 1:length(v)
B(1, :) = A(1, :) * v(k);
end

I have found the second solution to be faster than the first one. Is
there a better solution?

Thanks
Marius

Doug Schwarz

не прочитано,
27 янв. 2006 г., 09:02:2827.01.2006
In article <ef26e...@webx.raydaftYaTP>,
Marius <noemai...@hotmail.com> wrote:

You might find this to be interesting.

<http://www.frontiernet.net/~dmschwarz/genops.html>

I don't know if it's faster, but it works without replicating data.

--
Doug Schwarz
dmschwarz&urgrad,rochester,edu
Make obvious changes to get real email address.

French Caroline

не прочитано,
27 янв. 2006 г., 09:15:3727.01.2006
3rd solution :
B = diag(v)*A
Caroline

Michael Wild

не прочитано,
27 янв. 2006 г., 09:10:3327.01.2006

http://www.frontiernet.net/~dmschwarz/genops.html provides generalized
operators.

michael

kle...@gmail.com

не прочитано,
28 янв. 2006 г., 04:12:4228.01.2006
Thanks, exactly what I was looking for.
However, in order to compile it on Matlab 7.1 (R14) on Mac OS X, I had
to make the following changes:

- In makegenops.m, change the filename on l.31 from 'genops_noflops.c'
to 'genops.c'
- In genops.c, change the following lines, wherever they occur:
zMat = mxCreateNumericArray(ndim, s, mxDOUBLE_CLASS, mxREAL);
mxSetLogical(zMat);
to this:
zMat = mxCreateLogicalArray(ndim, s);

This seems to make it work fine. (mxSetLogical has been obsolete since
Matlab 6.5).
(Doug please comment if you think that will break the functionality)

Best
Marius

Doug Schwarz

не прочитано,
30 янв. 2006 г., 00:44:2730.01.2006
In article <1138439562....@o13g2000cwo.googlegroups.com>,
kle...@gmail.com wrote:

Marius,

That looks right and thanks for pointing these things out.

I originally wrote this back when MATLAB counted flops so I had my
functions update the flop counter. I updated the code by removing the
flop counting stuff when MATLAB eliminated it and called that version
genops_noflops.c. Eventually, I deleted the flops version, but it seems
that I didn't change makegenops.

Obviously, the second change is also due to the age of this code.

I'm glad to hear that it works for you.

Daniel

не прочитано,
27 июл. 2014 г., 19:24:0927.07.2014
Excellent.
Somebody knows the same for matrix multiplication? mtimes?
Thanks!

James Tursa

не прочитано,
28 июл. 2014 г., 11:36:1728.07.2014
"Daniel" wrote in message <lr41mp$bks$1...@newscl01ah.mathworks.com>...
> Excellent.
> Somebody knows the same for matrix multiplication? mtimes?
> Thanks!

If you mean nD matrix multiplication using 2D planes of the nD matrices, then there are submissions on the FEX that do this. E.g.

http://www.mathworks.com/matlabcentral/fileexchange/25977-mtimesx-fast-matrix-multiply-with-multi-dimensional-support

http://www.mathworks.com/matlabcentral/fileexchange/37515-mmx-multithreaded-matrix-operations-on-n-d-matrices

http://www.mathworks.com/matlabcentral/fileexchange/37515-mmx-multithreaded-matrix-operations-on-n-d-matrices

James Tursa
0 новых сообщений