Azzera filtri
Azzera filtri

How to multiply two matrices with different dimensions with high speed

7 visualizzazioni (ultimi 30 giorni)
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.
  4 Commenti
moh mor
moh mor il 23 Dic 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
Dyuman Joshi il 23 Dic 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.

Accedi per commentare.

Risposte (1)

Walter Roberson
Walter Roberson il 22 Dic 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 Commenti
Rik
Rik il 23 Dic 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
Walter Roberson il 23 Dic 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.

Accedi per commentare.

Prodotti


Release

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by