使用逻辑掩码传递矩阵的某些值
Passing certain values of a matrix usi a logical mask
假设我有一个逻辑矩阵MxN
:
mask=[0 0 0 0 0;
0 1 1 0 0;
0 1 1 0 0;
0 0 0 0 0;
0 0 0 0 0];
在这种情况下,M=N=5。
第二个矩阵 A
,大小为 'MxNx3'(RGB 图像)。我想针对掩码传递 A
的函数值。例如,所有不属于掩码的值:
foo(A(~mask));
当然这行代码没有用,因为 mask
只给我一种 RGB 颜色的索引。
- 正确的做法是什么?
- 我可以只用一行吗?
您可以使用repmat
在三维中重复您的面具 3 次。这将创建一个 nnz(~mask) * 3
元素向量。您可以重塑 repmat
操作的结果,使行是掩码中的 true
元素,列是第三维
foo(reshape(A(~repmat(mask, [1 1 3])), [], 3))
您也可以做类似 的事情来完成类似的事情。
假设我有一个逻辑矩阵MxN
:
mask=[0 0 0 0 0;
0 1 1 0 0;
0 1 1 0 0;
0 0 0 0 0;
0 0 0 0 0];
在这种情况下,M=N=5。
第二个矩阵 A
,大小为 'MxNx3'(RGB 图像)。我想针对掩码传递 A
的函数值。例如,所有不属于掩码的值:
foo(A(~mask));
当然这行代码没有用,因为 mask
只给我一种 RGB 颜色的索引。
- 正确的做法是什么?
- 我可以只用一行吗?
您可以使用repmat
在三维中重复您的面具 3 次。这将创建一个 nnz(~mask) * 3
元素向量。您可以重塑 repmat
操作的结果,使行是掩码中的 true
元素,列是第三维
foo(reshape(A(~repmat(mask, [1 1 3])), [], 3))
您也可以做类似