我有一个图片矩阵A
,其大小为200*3000 double
。我还有另一个图片矩阵B
,其大小为200*1000 double
。矩阵1000
的{{1}}列完全来自矩阵B
的列。我的问题是:
如何获得矩阵A
具有相同大小的矩阵C
,但只保留矩阵A
中列的原始值?我的意思是矩阵B
的大小为C
,但只有200*3000 double
列的值与矩阵1000
相同。其他B
列将设置为另一个值2000
,这是我的第二个问题,我应该为d
设置的值是什么,以便图片矩阵d
可以区分图片矩阵C
?
答案 0 :(得分:2)
将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