如何区分这两个图片矩阵?
How to distinguish the two picture matrices?
我有一个图片矩阵A
,它的大小是200*3000 double
。而我还有一个图片矩阵B
,它的大小是200*1000 double
。矩阵 B
的 1000
列恰好来自矩阵 A
的列。我的问题是:
如何获得与矩阵A
大小相同的矩阵C
,但只保留矩阵B
中列的原始值?我的意思是矩阵 C
的大小是 200*3000 double
,但只有 1000
列的值与矩阵 B
相同。其他2000
列将设置为另一个值d
,这是我的第二个问题,我应该为d
设置什么值,以便图片矩阵C
可以从图片矩阵区分A
?
使用 ismember
和 'rows'
选项。这是一个例子:
A = [1 2 3 4; 5 6 7 8]; %// example A
B = [3 10 1; 7 20 5]; %// example B
val = NaN; %// example value to indicate no match
C = A; %// initiallize
ind = ismember(A.',B.','rows'); %// matching columns
C(:,~ind) = val; %// set non-matching columns to val
等价地,您可以将 ismember
替换为 bsxfun
,这样该行就变成了
ind = any(all(bsxfun(@eq, A, permute(B, [1 3 2])), 1), 3);
在这个例子中,
A =
1 2 3 4
5 6 7 8
B =
3 10 1
7 20 5
C =
1 NaN 3 NaN
5 NaN 7 NaN
我有一个图片矩阵A
,它的大小是200*3000 double
。而我还有一个图片矩阵B
,它的大小是200*1000 double
。矩阵 B
的 1000
列恰好来自矩阵 A
的列。我的问题是:
如何获得与矩阵A
大小相同的矩阵C
,但只保留矩阵B
中列的原始值?我的意思是矩阵 C
的大小是 200*3000 double
,但只有 1000
列的值与矩阵 B
相同。其他2000
列将设置为另一个值d
,这是我的第二个问题,我应该为d
设置什么值,以便图片矩阵C
可以从图片矩阵区分A
?
使用 ismember
和 'rows'
选项。这是一个例子:
A = [1 2 3 4; 5 6 7 8]; %// example A
B = [3 10 1; 7 20 5]; %// example B
val = NaN; %// example value to indicate no match
C = A; %// initiallize
ind = ismember(A.',B.','rows'); %// matching columns
C(:,~ind) = val; %// set non-matching columns to val
等价地,您可以将 ismember
替换为 bsxfun
,这样该行就变成了
ind = any(all(bsxfun(@eq, A, permute(B, [1 3 2])), 1), 3);
在这个例子中,
A =
1 2 3 4
5 6 7 8
B =
3 10 1
7 20 5
C =
1 NaN 3 NaN
5 NaN 7 NaN