【问题标题】:Find indices in a 3D matrix在 3D 矩阵中查找索引
【发布时间】:2019-12-16 10:19:54
【问题描述】:

我有 2 个 3D 矩阵:

A=[19,18,17;16,15,14;13,12,11];

A(:,:,2)=[9,8,7;6,5,4;3,2,1];

B=sort(A,3);

有输出

A(:,:,1) =


19 18 17

16 15 14

13 12 11


A(:,:,2) =


9 8 7

6 5 4

3 2 1


B(:,:,1) =


9 8 7

6 5 4

3 2 1


B(:,:,2) =


19 18 17

16 15 14

13 12 11

我想在A 中找到B 的矩阵之一的第三坐标。

所以

find(A==B(:,:,1))

答案是

ans =



10

11

12

13

14

15

16

17

18

但是,我希望答案是2,因为这个矩阵在A的第三维第二位置:A(:,:,2)

我该怎么做?

我尝试了find(A(~,~,:)==B(:,:,1)),但出现了错误。

【问题讨论】:

  • 为什么排序函数的次要输出,索引,不是你想要的?
  • @GideonKogan 如果你这样做 ´[x,y,z]=find(A==B(:,:,1))´ y=[4,4,4,5,5, 5,6,6,6] 不能填入 A,因为它的最大值总是 3(A(1,4,1) 是不可能的)

标签: matlab matrix find matrix-indexing


【解决方案1】:

您可以使用ind2sub 将线性索引(find() 为您提供)转换为每个维度的索引:

A=[19,18,17;16,15,14;13,12,11];

A(:,:,2)=[9,8,7;6,5,4;3,2,1];

B=sort(A,3);

lin_idx = find(A==B(:,:,1));

[row,col,page] = ind2sub(size(A),lin_idx);  % page is 2 everywhere

我建议阅读this Q/A,了解有关 MATLAB 支持的不同类型索引的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多