代码之家  ›  专栏  ›  技术社区  ›  Pavlin

在3d矩阵中查找值

  •  1
  • Pavlin  · 技术社区  · 6 年前

    我想做相当于

    x = [1, 0, 3; 2, 3, 0; 0, 0, 3];
    [yy, xx, vals] = find(x);
    

    我真正需要的地方 vals 变量我需要这三个,但是 VAL 这很重要。现在考虑3d案例,翻转一个,这样更有趣。

    x = repmat(x, [1, 1, 3]);
    x(:, :, 2) = fliplr(x(:, :, 1));
    

    我想和以前一样。我在好几个地方发现了这个

    [yy, xx, zz] = ind2sub(size(x), find(x));
    

    但我不知道怎么提取 VAL 正确地我也不在乎 zz ,但我确信它们需要某种程度上用于索引。

    任何帮助都将不胜感激。

    2 回复  |  直到 6 年前
        1
  •  3
  •   Cris Luengo    6 年前

    find 使用一个输出参数,如您在上一条语句中使用的:

    [yy, xx, zz] = ind2sub(size(x), find(x));
    

    将线性索引返回到矩阵中。您可以使用这些索引:

    index = find(x);
    vals = x(index);
    [xx,yy,zz] = ind2sub(size(x), index);
    
        2
  •  2
  •   halfer    6 年前

    我不确定我是否理解您想要实现的目标,然而,考虑到您的上一个矩阵 x

    x = [1, 0, 3; 2, 3, 0; 0, 0, 3]
    z = repmat(x, [1, 1, 3]);
    x(:, :, 2) = fliplr(x(:, :, 1))
    

    具有

    [yy, xx, vals] = find(x)
    

    您有:

    • yy 找到的元素行的索引
    • xx 找到的元素列的索引

    然后您可以使用

    lin_idx=sub2ind(size(x),yy,xx)
    

    获取矩阵内值的线性指数 x个

    现在您可以使用

    [a,b,c]=ind2sub(size(x),lin_idx)
    

    获取矩阵中元素的三维索引

    您可以使用该索引访问值:

    for i=1:length(a)
       k(i)=x(a(i),b(i),c(i))
    end
    

    现在阵列 k 包含值(根据数组) vals 返回人 find )。