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