# How to multiply two matrices with different dimensions with high speed

11 views (last 30 days)
moh mor on 22 Dec 2023
Commented: Walter Roberson on 23 Dec 2023
Imagine that I have two matrices like this:
A = (1×51)
B = (30×50)
If I want to multiply these two matrices directly in matlab. I mean, for example A×B, must be in the form of 51×30×50 . You may tell me to do this :
C = A.*B(:);
D = reshape(C,[51 30 50]);
But I am in the condition that I'd rather increase speed by deleting vectorization operations (like ":"). That's why I'd like to get this matrix directly.
moh mor on 23 Dec 2023

If I could perform this manipulation directly, I would not need to perform ":" and "reshape" and I would get a "51×30×50" array directly. Apparently, this is not possible in MATLAB.

Dyuman Joshi on 23 Dec 2023
"If I could perform this manipulation directly, I would not need to perform ":" and "reshape" and I would get a "51×30×50" array directly. Apparently, this is not possible in MATLAB."
Please find the mathematics for directly doing that. I will be more than happy to write a code for you then.
If you are going to ignore the queries me and Matt raised and the answer Walter gave, atleast make a convincing point with some concrete evidence and information.

Walter Roberson on 22 Dec 2023
The (:) operator is one of the very fastest operators in MATLAB. It leaves the data pointer completely intact and just rewrites the header
'B' not-complex not-global 1 60002c491f20 2 30 50
(name) (flags) (count) (data pointer) (ndims) (dims)
becomes
'' not-complex not-global 2 60002c491f20 2 1500 1
with no rewriting of the data area (exact logic about the handling of the reference count may not be correct.)
##### 3 CommentsShow 1 older commentHide 1 older comment
Rik on 23 Dec 2023
As I understand it, you should prefer reshape over (:).', but I don't know if there is a difference without the transpose.
Walter Roberson on 23 Dec 2023
reshape() is defined as only affecting the header.
(:) is not defined that way. (:) is defined in terms of subsref() . In practice. (:) is optimized .
But I seem to recall that (:) for complex values historically triggered a copy whereas reshape() did not. But when I tested it in R2023b using format debug the data pointers were the same... so that is a behaviour that might have changed over time.

### Categories

Find more on Logical in Help Center and File Exchange

R2018b

### Community Treasure Hunt

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

Start Hunting!