Azzera filtri
Azzera filtri

Subtracting values in a matrix

5 visualizzazioni (ultimi 30 giorni)
Jakub Nosek
Jakub Nosek il 6 Nov 2017
Commentato: Jakub Nosek il 6 Nov 2017
Hi, can I just ask you why the code below does not work? I am trying to subtract each value in a row from each other and if the condition is met then add 1 to matrix11(i,j). Apparently there's a problem with matrix10(i,:) expression.
matrix10=[1 7 20; 4 5 6; 7 8 9; 2 5 8];
[zk1, zk2] = size(matrix10);
matrix11=zeros(zk1,zk2);
for i=1:zk1
for j=1:zk2
if (abs(matrix10(i,j) - matrix10(i,:)) >= 2)
matrix11(i,j)=matrix11(i,j)+1;
end
end
end
matrix11 =
0 0 0
0 0 0
0 0 0
0 0 0

Risposte (1)

Kaushik Lakshminarasimhan
The problem is with this expression in the if statement:
if abs(matrix10(i,j) - matrix10(i,:)) >= 2
The left hand side is a vector but right side is a scalar -- which means that the condition is only met if all 3 differences exceed 2. What is the actual condition you want to check? If it is whether the total sum of differences exceeds 2, then you need to change the statement to:
if sum(abs(matrix10(i,j) - matrix10(i,:))) >= 2
Or it could be something else depending on what your condition actually is.
  5 Commenti
Kaushik Lakshminarasimhan
Modificato: Kaushik Lakshminarasimhan il 6 Nov 2017
If matrix10 and matrix12 have the same number of columns, then you won't need an if statement.
You can do something like:
isTrue1 = (abs(matrix10(i,j) - matrix10(i,:)) >= 2);
isTrue2 = (abs(matrix12(i,j) - matrix12(i,:)) <= 5);
isTrue = (isTrue1 & isTrue2); % if both must be true
Jakub Nosek
Jakub Nosek il 6 Nov 2017
Great! Thanks a lot!!

Accedi per commentare.

Categorie

Scopri di più su Resizing and Reshaping Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by