Arrays MATLAB中的逻辑数组与数值数组

Arrays MATLAB中的逻辑数组与数值数组,arrays,performance,matlab,Arrays,Performance,Matlab,我正在比较两个二进制数组。我有一个数组,其中的值可以是一或零,如果值相同,则为一,如果值不相同,则为零。请注意,我正在做检查以外的其他事情,所以我们不需要进入矢量化或代码的性质 在MATLAB中使用数字数组或逻辑数组,什么更有效?值比大多数值占用更少的字节,如果处理非常大的数组,这是一个优点。您还可以使用逻辑阵列来执行此操作。例如: >> valArray = 1:5; %# Array of values >> numIndex =

我正在比较两个二进制数组。我有一个数组,其中的值可以是一或零,如果值相同,则为一,如果值不相同,则为零。请注意,我正在做检查以外的其他事情,所以我们不需要进入矢量化或代码的性质

在MATLAB中使用数字数组或逻辑数组,什么更有效?

值比大多数值占用更少的字节,如果处理非常大的数组,这是一个优点。您还可以使用逻辑阵列来执行此操作。例如:

>> 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
请注意:如果您要处理由零和非常稀疏的1组成的数组(即非常少的1),最好使用从函数中获得的数字索引数组。以下面的示例为例:

>> 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

当然合乎逻辑!Matlab可以选择将8项压缩为1字节。(是否会是另一回事)

结果

4.561173 seconds
3.454697 seconds
但是如果你做的是更多的逻辑操作,而不仅仅是循环,好处会更大

4.561173 seconds
3.454697 seconds