从由2d数组掩盖的3d数组返回2d数组

时间:2018-01-02 22:57:44

标签: matlab

使用3维矩阵和2维布尔掩码,我试图返回掩码中对应于True的所有3值集。例如 我有矩阵:

matrix(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


matrix(:,:,2) =

     1     2     3
     4     5     6
     7     8     9


matrix(:,:,3) =

     1     2     3
     4     5     6
     7     8     9

和面具:

mask =


   0   0   0
   0   1   1
   1   1   1

>> matrix(mask)

ans =

     7
     5
     8
     6
     9

这个索引似乎只掩盖了3d矩阵的第一个切片。如何返回具有所有指定3值对的2d数组?

虽然形状和顺序并不重要,但我希望我的输出看起来如下所示,其中输出的一个维度对应于3d数组的第三维。

[7,7,7]
[5,5,5]
[8,8,8]
[6,6,6]
[9,9,9] 

1 个答案:

答案 0 :(得分:3)

您可以将原始3d数组转换为2d,其中每行来自第3维中的向量:

matrix2 = reshape(matrix, [], size(matrix, 3))
matrix2 =

   1   1   1
   4   4   4
   7   7   7
   2   2   2
   5   5   5
   8   8   8
   3   3   3
   6   6   6
   9   9   9

然后使用mask中1的索引作为行索引:

vectors = matrix2(find(mask), :)
vectors =

   7   7   7
   5   5   5
   8   8   8
   6   6   6
   9   9   9

在评论中提及@LuisMendo,如果mask是逻辑数组,则您甚至不需要调用find

vectors = matrix2(mask, :)
vectors =

   7   7   7
   5   5   5
   8   8   8
   6   6   6
   9   9   9