比较矩阵中的单元格与另一个单元格中的所有单元格,并将结果存储在第三个矩阵中

时间:2015-05-09 09:35:30

标签: matlab

我想比较矩阵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]

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