2012-11-06 32 views

risposta

-1

tipo di dati logici di Matlab non sembra avere un costruttore diversa dalla funzione logical stesso. Detto questo, si può efficacemente typecast una doppia matrice come una matrice logica molto facilmente, dove tutti i valori diversi da zero diventano logico 1 e tutti zeri logico 0:

A = [1 0 2; -1 0 0; 0 1.53 -100.00] 

B = logical(A) 

B = 
    1  0  1 
    1  0  0 
    0  1  1 

ovviamente è possibile condensare questa assegnazione di una linea se' Mi piace, quindi diventa quasi semplice come l'assegnazione di qualsiasi altro tipo di dati.

+0

Partenza il link nella mia risposta - 'false' e' true' può essere usato proprio come 'zeros' e' ones', per inizializzare direttamente una matrice logica piuttosto che una doppia matrice di precisione. – tmpearce

+0

D'accordo, anche se questo inizializza solo un array totalmente vero o totalmente falso - che può andare bene, o potresti voler controllare direttamente i valori. Puoi sfruttare il vero e il falso in questo modo? O sei bloccato usando il logico su un doppio array? – nicktruesdale

+0

Risposta: se non ti interessa la sintassi goffa per i grandi array, a = [false, true; false false] funziona direttamente. – nicktruesdale

8

In Matlab ci sono alcune "costanti" che in realtà sono comandi generatori di matrice. Essi sono:

true(10); true(n,m,k,..); % for an all-true 10-by-10 or n-by-m-by-k-by-...matrix 
false(10); false(n,m,k,..); % for an all-false 10-by-10 or n-by-m-by-k-by-...matrix 
inf(10); inf(n,m,k,..); % for an all-inf 10-by-10 or n-by-m-by-k-by-...matrix 
nan(10); nan(n,m,k,..); % for an all-nan 10-by-10 or n-by-m-by-k-by-...matrix 

Le forme 'costante' sono fondamentalmente solo alias:

a = inf; % alias for a = inf(1); 
b = true; % alias for b = true(1); 

ecc Inoltre, qui ci sono alcune altre cose che non può essere ripetuto abbastanza:

rand(10); rand(n,m,k,..); % for an all-random 10-by-10 or n-by-m-by-k-by-...matrix 
zeros(10); zeros(n,m,k,..); % for an all-zero 10-by-10 or n-by-m-by-k-by-...matrix 
zeros(n,m,k,...,'uint8');  % for an all-zero n-by-m-by-k-by-...matrix of type uint8 
ones(10); zeros(n,m,k,..); % for an all-one 10-by-10 or n-by-m-by-k-by-...matrix 
ones(n,m,k,...,'uint8');  % for an all-one n-by-m-by-k-by-...matrix of type uint8 
eye(10); eye(n,m,'uint8'); % for an identity matrix of type uint8 of 10-by-10 or n-by-m 
Problemi correlati