Matlab 在3d矩阵中查找值

Matlab 在3d矩阵中查找值,matlab,octave,Matlab,Octave,我想做相当于 x = [1, 0, 3; 2, 3, 0; 0, 0, 3]; [yy, xx, vals] = find(x); 其中我真正需要vals变量。我需要这三个,但是vals很重要。现在考虑3D案例,然后翻转一个,所以它更有趣。 x = repmat(x, [1, 1, 3]); x(:, :, 2) = fliplr(x(:, :, 1)); 我想和以前一样。我在好几个地方发现了这个 [yy, xx, zz] = ind2sub(size(x), find(x)); 但是我不

我想做相当于

x = [1, 0, 3; 2, 3, 0; 0, 0, 3];
[yy, xx, vals] = find(x);
其中我真正需要
vals
变量。我需要这三个,但是
vals
很重要。现在考虑3D案例,然后翻转一个,所以它更有趣。

x = repmat(x, [1, 1, 3]);
x(:, :, 2) = fliplr(x(:, :, 1));
我想和以前一样。我在好几个地方发现了这个

[yy, xx, zz] = ind2sub(size(x), find(x));
但是我不知道如何正确提取
vals
。。。我也不太关心
zz
,但我确信它们需要某种方式用于索引


任何帮助都将不胜感激。

考虑到您最后的矩阵
x

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

你有:

  • yy
    找到的元素行的索引
  • xx
    找到的元素的列的索引
然后你可以用

lin_idx=sub2ind(size(x),yy,xx)
[a,b,c]=ind2sub(size(x),lin_idx)
获取矩阵
x

x = [1, 0, 3; 2, 3, 0; 0, 0, 3]
z = repmat(x, [1, 1, 3]);
x(:, :, 2) = fliplr(x(:, :, 1))
现在你可以使用

lin_idx=sub2ind(size(x),yy,xx)
[a,b,c]=ind2sub(size(x),lin_idx)
获取矩阵中元素的三维索引

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

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

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

考虑到上一个矩阵
x

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

你有:

  • yy
    找到的元素行的索引
  • xx
    找到的元素的列的索引
然后你可以用

lin_idx=sub2ind(size(x),yy,xx)
[a,b,c]=ind2sub(size(x),lin_idx)
获取矩阵
x

x = [1, 0, 3; 2, 3, 0; 0, 0, 3]
z = repmat(x, [1, 1, 3]);
x(:, :, 2) = fliplr(x(:, :, 1))
现在你可以使用

lin_idx=sub2ind(size(x),yy,xx)
[a,b,c]=ind2sub(size(x),lin_idx)
获取矩阵中元素的三维索引

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

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

现在,数组
k
包含值(根据
find
返回的数组
vals
)。

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

[yy, xx, zz] = ind2sub(size(x), find(x));
将线性索引返回到矩阵中。您可以使用这些索引:

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

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

[yy, xx, zz] = ind2sub(size(x), find(x));
将线性索引返回到矩阵中。您可以使用这些索引:

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

谢谢,这太好了。也比其他答案更好,因为没有循环:)谢谢!谢谢,这太好了。也比其他答案更好,因为没有循环:)谢谢!谢谢,虽然这是可行的,但它使用了for循环,这是出了名的慢,而不是索引。无论如何谢谢你!谢谢,虽然这是可行的,但它使用了for循环,这是出了名的慢,而不是索引。无论如何谢谢你!