Matlab 从二维数组屏蔽的三维数组返回二维数组
对于三维矩阵和二维布尔掩码,我试图返回掩码中与真值对应的所有3值集。例如 我有矩阵:Matlab 从二维数组屏蔽的三维数组返回二维数组,matlab,Matlab,对于三维矩阵和二维布尔掩码,我试图返回掩码中与真值对应的所有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
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]
可以通过将原始三维阵列转换为二维阵列来完成此操作,其中每一行来自三维中的向量:
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
正如注释中提到的,如果
mask
是一个逻辑数组,您甚至不需要调用find
:
vectors = matrix2(mask, :)
vectors =
7 7 7
5 5 5
8 8 8
6 6 6
9 9 9
查找
可以删除(假设掩码
是逻辑的
)