zeros matrices logical index empty create concatenate concatenar array matlab matrix

matrices - vector matlab



Establezca todos los elementos de la matriz distintos de cero en 1(manteniendo los otros 0) (3)

Tengo una malla definida como

[X, Y, Z] = meshgrid(-100:100, -100:100, 25); % z will have more values later

y dos formas (óvalos, en este caso):

x_offset_1 = 40; x_offset_2 = -x_offset_1; o1 = ((X-x_offset_1).^2./(2*Z).^2+Y.^2./Z.^2 <= 1); o2 = ((X-x_offset_2).^2./(2*Z).^2+Y.^2./Z.^2 <= 1);

Ahora, quiero encontrar todos los puntos que sean distintos de cero en cualquiera de los dos . Lo intenté

union = o1+o2;

pero como simplemente los agrego, la región superpuesta tendrá un valor de 2 en lugar del 1 deseado.

¿Cómo puedo establecer todas las entradas distintas de cero en la matriz en 1, independientemente de su valor anterior?

(Intenté normalized_union = union./union; pero luego termino con NaN en los 0 elementos porque estoy dividiendo por cero ...)


La solución más simple: A=A~=0; , donde A es tu matriz.

Esto solo realiza una operación lógica que verifica si cada elemento es cero. Entonces devuelve 1 si el elemento es distinto de cero y 0 si es cero.


Hay otra solución simple, A = lógica (A)


Primera sugerencia: no use union como nombre de variable, ya que sombreará la union función incorporada. Sugeriría usar el nombre de la variable en inEitherOval en inEitherOval lugar, ya que es más descriptivo ...

Ahora, una opción que tienes es hacer algo como lo que sugiere abcd en el que agregas tus matrices o1 y o2 y usas el operador relacional no igual a :

inEitherOval = (o1+o2) ~= 0;

Un par de otras posibilidades en el mismo sentido usan el operador lógico not o la función logical :

inEitherOval = ~~(o1+o2); % Double negation inEitherOval = logical(o1+o2); % Convert to logical type

Sin embargo, la solución más sucinta es aplicar el operador lógico or operador directamente a o1 y o2 :

inEitherOval = o1|o2;

Lo que dará como resultado un valor de 1 donde cualquiera de las matrices es distinta de cero y cero de lo contrario.