How to add, multiply and subtract two matrices have different length ?
45 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
omar th
am 13 Mär. 2022
Beantwortet: Image Analyst
am 26 Mär. 2022
If I have matrix A =[2 2 1; 1 2 5; 1 2 3], B=[1 2; 1 1],
How can I add or subtract these matrices while they have different length ?
1 Kommentar
Torsten
am 13 Mär. 2022
Mathematical, there are no such operations for matrices of different sizes.
So you first will have to explain us how you intend to define these "additions and subtractions".
Akzeptierte Antwort
Star Strider
am 13 Mär. 2022
While adding two matrices of different dimensions is not defined mathematically, it is possible to add or subtract them by indexing into them, however it is first necessary to define what elements are to be affected in the larger matrix.
Here is one approach —
A = [2 2 1; 1 2 5; 1 2 3]
B = [1 2; 1 1]
idx = 1:numel(B); % Using The Most Obvious Index Vector ...
C = A;
C(idx) = A(idx) + B(idx)
idx = randperm(numel(A), numel(B)) % Using A Different, Random, Index Vector ...
C = A;
C(idx) = A(idx) + B(1:numel(B))
So in a limited sense it is possible, however I have no way of knowing if either of these produces the desired result.
.
8 Kommentare
Star Strider
am 26 Mär. 2022
@omar th —
That depends on what the desired results are.
A = randi(9,3)
B = randi(9,2)
C = A;
C(1:2,1:2) = A(1:2,1:2) + B
.
Image Analyst
am 26 Mär. 2022
So, because of that you forgot to state what the desired results are! I guess you also missed Star's gentle hint. So, what are they? What elements get subtracted from what elements, and what elements are ignored during the operation?
Weitere Antworten (1)
Image Analyst
am 26 Mär. 2022
Perhaps this is what you want -- to subtract the upper left parts that overlap.
A = [2 2 1; 1 2 5; 1 2 3]
B = [1 2; 1 1]
[rowsA, colsA] = size(A)
[rowsB, colsB] = size(B)
maxRow = max([rowsA, rowsB])
maxCol = max([colsA, colsB])
% Pad dimensions if nexessary
if rowsA > rowsB
B(maxRow, end) = 0;
[rowsB, colsB] = size(B) % Update size
elseif rowsB > rowsA
A(maxRow, end) = 0;
[rowsA, colsA] = size(A) % Update size
end
if colsA > colsB
B(end, maxCol) = 0;
[rowsB, colsB] = size(B) % Update size
elseif colsB > colsA
A(end, maxCol) = 0;
[rowsA, colsA] = size(A) % Update size
end
% Let's see what they are now:
A
B
% Now do the subtraction of the upper left overlapping parts.
C = A - B
You get:
A =
2 2 1
1 2 5
1 2 3
B =
1 2 0
1 1 0
0 0 0
C =
1 0 1
0 1 5
1 2 3
0 Kommentare
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!