Logical valori occupano meno byte della maggior parte dei valori numeric, che è un vantaggio se si ha a che fare con array di grandi dimensioni. È anche possibile utilizzare gli array logici per fare logical indexing. Ad esempio:
>> valArray = 1:5; %# Array of values
>> numIndex = [0 1 1 0 1]; %# Numeric array of ones and zeroes
>> binIndex = logical([0 1 1 0 1]); %# Logical array of ones and zeroes
>> whos
Name Size Bytes Class Attributes
binIndex 1x5 5 logical %# 1/8 the number of bytes
numIndex 1x5 40 double %# as a double array
valArray 1x5 40 double
>> b = valArray(binIndex) %# Logical indexing
b =
2 3 5
>> b = valArray(find(numIndex)) %# You have to use the FIND function to
%# find the indices of the non-zero
b = %# values in numIndex
2 3 5
Una nota: Se che fare con matrici di zeri e quelli che sono molto radi (cioè quelli molto pochi), può essere preferibile utilizzare un array di indici numerici, ad esempio si otterrebbe dal FIND function.Take il seguente esempio:
>> binIndex = false(1,10000); %# A 1-by-10000 logical array
>> binIndex([2 100 1003]) = true; %# Set 3 values to true
>> numIndex = find(binIndex) %# Find the indices of the non-zero values
numIndex =
2 100 1003
>> whos
Name Size Bytes Class Attributes
binIndex 1x10000 10000 logical %# 10000 bytes versus
numIndex 1x3 24 double %# many fewer bytes
%# for a shorter array
Risposta molto buona! – Elpezmuerto