【问题标题】:Faster way for find some value in matrix with matlab使用matlab在矩阵中找到一些值的更快方法
【发布时间】:2016-10-14 03:41:34
【问题描述】:

我有一个矩阵,我试图找到我在哪里得到一个值。所以,我使用find(x==y)来制作带有值的向量,例如:

n11=find(x==11)
n4=find(x==4)
n8=find(x==8)

而n11、n4、n8的长度不同。

有时,对于 20 或 30 个不同的 x 值,我必须这样做 20 或 30 次,因此,例如,如果我想获得 x∈[1991,2015] find(x==1991) to find(x==2015) 的区间,我该如何获得这些值更快而不做

find(x==1991)
.
.
.
find(x==2015)

谢谢你

【问题讨论】:

    标签: arrays matlab sorting matrix numbers


    【解决方案1】:

    你可以使用logical indexing:

    n= find(x>=1991 & x<=2015)
    

    编辑

    meshgrid可用于获取每年的向量:

    x= [1991 1992 1991 2015 2016 1992 1988 1994]; % example data
    [m,n]= meshgrid(x,1991:2015); % the second argument contains the years we need
    n= (m==n);
    

    现在n(1,:) 等于x==1991n(2,:) 等于x==1992 等等; find(n(1,:)) 等于 find(x==1991) 等等。

    【讨论】:

    • 但我每年都需要一个向量。
    【解决方案2】:

    您可以使用矩阵来保存结果。并使用“for循环”自动执行。

    start=1991;
    endi=2015;
    for i=start:endi
        num_column=size(find(x==i),1)
        mat(i-start+1,1:num_column)=find(x==i);
    end
    

    在每一行中,我们有一个值忽略零数字的结果。

    【讨论】:

      猜你喜欢
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      相关资源
      最近更新 更多