Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.

Dismiss

1,712 views

Skip to first unread message

Jan 27, 2006, 8:58:15 AM1/27/06

to

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

Jan 27, 2006, 9:02:28 AM1/27/06

to

In article <ef26e...@webx.raydaftYaTP>,

Marius <noemai...@hotmail.com> wrote:

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.

Jan 27, 2006, 9:15:37 AM1/27/06

to

3rd solution :

B = diag(v)*A

Caroline

B = diag(v)*A

Caroline

Jan 27, 2006, 9:10:33 AM1/27/06

to

Jan 28, 2006, 4:12:42 AM1/28/06

to

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:

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

Jan 30, 2006, 12:44:27 AM1/30/06

to

In article <1138439562....@o13g2000cwo.googlegroups.com>,

kle...@gmail.com wrote:

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.

Jul 27, 2014, 7:24:09 PM7/27/14

to

Excellent.

Somebody knows the same for matrix multiplication? mtimes?

Thanks!

Somebody knows the same for matrix multiplication? mtimes?

Thanks!

Jul 28, 2014, 11:36:17 AM7/28/14

to

"Daniel" wrote in message <lr41mp$bks$1...@newscl01ah.mathworks.com>...

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

> 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.
> Somebody knows the same for matrix multiplication? mtimes?

> Thanks!

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 new messages

Search

Clear search

Close search

Google apps

Main menu