【问题标题】:Return 2d array from 3d array masked by 2d array从被 2d 数组屏蔽的 3d 数组返回 2d 数组
【发布时间】:2018-01-03 08:51:13
【问题描述】:

使用 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 值对的二维数组?

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

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

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您可以通过将原始 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 在 cmets 中提到的,如果 mask 是一个逻辑数组,您甚至不需要调用 find

    vectors = matrix2(mask, :)
    vectors =
    
       7   7   7
       5   5   5
       8   8   8
       6   6   6
       9   9   9
    

    【讨论】:

    • find 可以删除(假设masklogical
    猜你喜欢
    • 2021-03-08
    • 2018-08-06
    • 1970-01-01
    • 2017-08-19
    • 2021-09-20
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多