我想比较矩阵X中的所有单元格坐标,以便将每个单元格与另一个名为Yint的矩阵中的所有坐标进行比较(Yint包含两列和65行,每行代表坐标(x,y)一个细胞)。
如果X中单元格的坐标等于Yint中的任何坐标,则将其他0存储在称为标签的第三个矩阵中。
Yint中的第33行只是Yint矩阵中的一个标志,这就是我忽略它的原因。
问题是标签矩阵总是给我零。我认为我的代码有问题。知道X中的值应满足条件并在标签矩阵中存储1。
labels = zeros(65536, 1);
Yint= round (Y);
counter=1;
for row = 1:1:rows
for col = 1:1:cols
pointer=1;
for pointer=1:1:65
if (isequal(row , Yint(pointer,1)) && isequal(col , Yint(pointer,2)) && pointer ~= 33)
labels(counter) = 1;
else
labels(counter) = 0;
end
end
counter=counter+1;
end
end
矩阵行X列:
Yint:65 X 2
X:256 X 256
标签:65536 X 1
简化示例:
X = [3 5 3;
2 7 4;
1 7 2]
Yint = [1 1;
2 3;
3 3]
标签矩阵可以视为:
labels = [1 0 0;
0 0 1;
0 0 1]
但是,我们希望它是一个向量(9x1),我们得到的是:
labels = [1;
0;
0;
0;
0;
1;
0;
0;
1]
答案 0 :(得分:2)
对于您给出的示例和预期结果,这应该有效:
Yind = sub2ind(size(X),Yint(:,1),Yint(:,2));
out = zeros(size(X));
out(Yind) = 1;
out = reshape(out.',1,[]).';
<强>结果:强>
输入:
X = [3 5 3;
2 7 4;
1 7 2];
Yint = [1 1;
2 3;
3 3];
输出:
out =
1
0
0
0
0
1
0
0
1
如果要匹配所有匹配项而不是位置
,则需要进行其他工作Yind = sub2ind(size(X),Yint(:,1),Yint(:,2));
out = arrayfun(@(x) any(x == X(Yind)),X);
您的输出(对于相同的输入)将是这样的:
>> out
out =
1 0 1
1 0 1
0 0 1
您可以根据需要重塑这个:
out = reshape(out.',1,[]).';
重塑后:
>> out
out =
1
0
1
1
0
1
0
0
1