How to multiply two matrices with different dimensions with high speed

조회 수: 9 (최근 30일)
moh mor
moh mor 2023년 12월 22일
댓글: Walter Roberson 2023년 12월 23일
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
moh mor
moh mor 2023년 12월 23일

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 2023년 12월 23일
"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.

댓글을 달려면 로그인하십시오.

답변 (1개)

Walter Roberson
Walter Roberson 2023년 12월 22일
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
Rik
Rik 2023년 12월 23일
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 2023년 12월 23일
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.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품


릴리스

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by