繁体   English   中英

在matlab中计算数组中落入特定阈值的元素?

[英]count elements falling within certain thresholds in array in matlab?

我有一个巨大的向量。 我必须计算落在某些范围内的值。 范围类似于 0-10、10-20 等。我必须计算落在某个范围内的值的数量。

我做了这样的事情:

for i=1:numel(m1)
if (0<m1(i)<=10)==1
k=k+1;
end
end

还:

if not(isnan(m1))==1
x=(0<m1<=10);
end

但是两次它都给出了包含全 1 的数组。 我做错了什么?

你可以做这样的事情(也适用于非整数)

k = sum(m1>0 & m1<=10)

您可以使用逻辑索引 观察:

>> x = randi(40, 1, 10) - 20
x =
  -2    17   -12    -9   -14   -14    15     4     2   -14
>> x2 = x(0 < x & x < 10)
x2 =
   4     2
>> length(x2)
ans =
    2

一步完成相同的操作:

>> length(x(0 < x & x < 10))
ans =
    2

要计算特定范围内的值,您可以使用ismember

如果m1是矢量使用,

k = sum(ismember(m1,0:10));

如果m1是矩阵使用k = sum(sum(ismember(m1,0:10)));

例如,

m1=randi(20,[5 5])

 9    10     6    10    16
 8     9    14    20     6
16    13    14     7    11
16    15     4    12    14
 4    16     3     5    18

sum(sum(ismember(m1,1:10)))

12

为什么不简单地做这样的事情?

% Random data
m1 = 100*rand(1000,1);

%Count elements between 10 and 20
m2 = m1(m1>10 & m1<=20);
length(m2) %number of elements of m1 between 10 and 20

然后你可以把东西放在一个循环中

% Random data
m1 = 100*rand(1000,1);

nb_elements = zeros(10,1);

for k=1:length(nb_elements)
    temp = m1(m1>(10*k-10) & m1<=(10*k));
    nb_elements(k) = length(temp);
end 

然后nb_elements包含您的数据,其中nb_elements(1)用于 0-10 范围, nb_elements(2)用于 10-20 范围,等等......

Matlab 不知道如何计算组合逻辑表达式

(0<m1(i)<=10)

你应该使用:

for i=1:numel(m1)
    if (0<m1(i)) && (m1(i)<=10)
        k=k+1;
    end
end

并固定它可能是这样的:

sum((0<m1) .* (m1<=10))

或者您可以创建逻辑数组,然后使用逐元素乘法。 不知道这有多快,它可能会为大型数组使用大量内存。

像这样的东西

A(find((A>0.2 .* (A<0.8)) ==1))

生成值

A=兰特(5)

一 =

0.414906   0.350930   0.057642   0.650775   0.525488
0.573207   0.763477   0.120935   0.041357   0.900946
0.333857   0.241653   0.421551   0.737704   0.162307
0.517501   0.491623   0.016663   0.016396   0.254099
0.158867   0.098630   0.198298   0.223716   0.136054

找到值 > 0.8 和 < 0.2 的交集。 这将为您提供两个逻辑数组,其中A>0.2A<0.8的值在逐元素乘法后将为=1

find((A>0.2 .* (A<0.8)) ==1)

然后将这些索引应用于A

A(find((A>0.2 .* (A<0.8)) ==1))

ans =

   0.41491
   0.57321
   0.33386
   0.51750
   0.35093
   0.76348
   0.24165
   0.49162
   0.42155
   0.65077
   0.73770
   0.22372
   0.52549
   0.90095
   0.25410

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM