How to combine 2 matrices conditionally and use short circuiting

1 visualización (últimos 30 días)
Teddy Fisher
Teddy Fisher el 20 de Feb. de 2020
Comentada: Walter Roberson el 21 de Feb. de 2020
I have 2 matrices of the same size, A & B, containing only 1s and 0s.
I want to combine these matrices into a new matrix, C, so that the 1s in B go into C only if they overlap or follow (in a column) 1s from A, and otherwise, turn to 0s. And, the 1s from A stay in C only if they are followed by 1s from B. I think I have to use short circuiting, but I'm not sure how to use it to combine these matrices.
For example:
A=[1 0 0 1 0;
1 0 0 0 0;
0 0 0 1 0]
B=[0 0 1 1 0;
0 1 0 1 0;
1 1 0 0 0]
%and I want to C to be:
C=[1 0 0 1 0;
1 0 0 1 0;
1 0 0 0 0]
I tried a for loop with if else loops nested in it, that I thought would loop through A & B column by column and then change values in C based on the conditions:
for x=1:size(A,1)
for y=1:size(B,1)
if A(x)=1 & B(y)=1 || A(x)=1 & B(y)=0 %error here
C(x,y)=1
else C(x,y)=0
if A(x)=1 & B(y(A(x)+1))=0
C(x,y(x+1))=0 %here I'm not sure how to make the 1s in B that are more than 1 removed from the 1 in A change to 0
end
end
end
end
But it gives me the error:
if A(x)=1 & B(y)=1 || A(x)=1 & B(y)=0
Error: The expression to the left of the equals sign is not a valid target for an assignment
Is this the right way to go about it? And if it is, how do I fix this error?
Please help, and thanks!!
  1 comentario
Walter Roberson
Walter Roberson el 21 de Feb. de 2020
= is always assignment, except in some contexts involving quoted strings and the symbolic toolbox.
Comparisons are ==
You cannot short circuit a matrix calculation. You can find() the locations that the first applies for and only do the second test for those locations, but this is very likely slower.
Your test can be simplified. B is always 0 or 1 so A==1&B==0 or A==1&B==1 logically reduces to A==1 alone. That would not be the case if there was a third B value.
If you used logical() then A==1 would be the same as A without further explicit tests for 1

Iniciar sesión para comentar.

Respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Productos


Versión

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by