Arrays 在matlab中计算数组中某些阈值内的元素?

Arrays 在matlab中计算数组中某些阈值内的元素?,arrays,matlab,count,Arrays,Matlab,Count,我有一个巨大的向量。我必须计算某些范围内的数值。 范围像是0-10,10-20等等。我必须计算在特定范围内的值的数量 我是这样做的: for i=1:numel(m1) if (0<m1(i)<=10)==1 k=k+1; end end i=1时的:numel(m1) 如果(0要计算特定范围内的值,可以使用ismember 如果m1是矢量使用 k = sum(ismember(m1,0:10)); 如果m1是矩阵,则使用k=sum(sum(ismember(m1,0:10));

我有一个巨大的向量。我必须计算某些范围内的数值。 范围像是0-10,10-20等等。我必须计算在特定范围内的值的数量

我是这样做的:

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

如果(0要计算特定范围内的值,可以使用
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

要计算特定范围内的值,可以使用
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

您可以这样做(也适用于非整数)


k=sum(m1>0&m1您可以这样做(也适用于非整数)

k=sum(m1>0&m1您可以使用。注意:

>> 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
>x=randi(40,1,10)-20
x=
-2    17   -12    -9   -14   -14    15     4     2   -14
>>x2=x(0>长度(x2)
ans=
2.
一步到位:

>> length(x(0 < x & x < 10))
ans =
    2
>长度(x(0
您可以使用。注意:

>> 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
>x=randi(40,1,10)-20
x=
-2    17   -12    -9   -14   -14    15     4     2   -14
>>x2=x(0>长度(x2)
ans=
2.
一步到位:

>> length(x(0 < x & x < 10))
ans =
    2
>长度(x(0
为什么不干脆做这样的事情呢

% 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
%随机数据
m1=100*兰特(1000,1);
%计算10到20之间的元素

m2=m1(m1>10&m1(10*k-10)&m1为什么不这样做呢

% 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
%随机数据
m1=100*兰特(1000,1);
%计算10到20之间的元素

m2=m1(m1>10&m1(10*k-10)&m1Matlab不知道如何计算组合逻辑表达式

(0<m1(i)<=10)

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

(0<m1(i)<=10)

(0或者您可以创建逻辑数组,然后使用元素乘法。但不知道这有多快,而且对于大型数组可能会占用大量内存

像这样的

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

找到值>0.8和<0.2的交叉点。这将为您提供两个逻辑数组以及
A>0.2和
A的值,或者您可以创建逻辑数组,然后使用元素乘法。但不知道这有多快,而且对于大型数组可能会使用大量内存

像这样的

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

找到值>0.8和<0.2的交叉点。这将为您提供两个逻辑数组和
A>0.2和
A的值。这更好我想得太多了!+1,那更好我想得太多了!+1,我们也可以这样做,但我认为它需要一些修改。无论如何,谢谢。我们也可以这样做,但我很瘦k它需要一些修改。无论如何,谢谢。Matlab确实知道如何解释这个表达式(试试)。只是它不是OP想要的是,它能够解释它,但不是发问者想要的数学意义。主要问题是“我做错了什么?”Matlab确实知道如何解释这个表达式(试试)。只是它不是OP想要的是的,它能够解释它,但不是发问者想要的数学意义上的。主要问题是“我做错了什么?”,我试着给它一个答案。作为非答案解释为什么
(0作为非答案解释为什么
(0
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