在 3d 矩阵中查找值
Find values in 3d matrix
我想做相当于
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, vals] = find(x)
你有:
yy
找到的元素的行索引
xx
找到的元素的列索引
那么你可以使用
lin_idx=sub2ind(size(x),yy,xx)
获取矩阵内值的线性索引x
现在您可以使用
[a,b,c]=ind2sub(size(x),lin_idx)
获取矩阵中元素的 3D 索引
您可以使用该索引访问值:
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));
returns 矩阵的线性索引。您可以使用这些索引:
index = find(x);
vals = x(index);
[xx,yy,zz] = ind2sub(size(x), index);
我想做相当于
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, vals] = find(x)
你有:
yy
找到的元素的行索引xx
找到的元素的列索引
那么你可以使用
lin_idx=sub2ind(size(x),yy,xx)
获取矩阵内值的线性索引x
现在您可以使用
[a,b,c]=ind2sub(size(x),lin_idx)
获取矩阵中元素的 3D 索引
您可以使用该索引访问值:
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));
returns 矩阵的线性索引。您可以使用这些索引:
index = find(x);
vals = x(index);
[xx,yy,zz] = ind2sub(size(x), index);