使用三维矩阵和二维布尔掩码,我试图返回所有与掩码中的真对应的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数组?
虽然形状和顺序并不重要,但我希望输出类似于以下内容,其中输出的一个维度对应于三维数组的第3维。
[7,7,7]
[5,5,5]
[8,8,8]
[6,6,6]
[9,9,9] 发布于 2018-01-02 23:08:59
要做到这一点,可以将原始的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 9https://stackoverflow.com/questions/48068966
复制相似问题