Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 将矩阵中的一个单元格与另一个矩阵中的所有单元格进行比较,并将结果存储在第三个矩阵中_Matlab - Fatal编程技术网

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

Matlab 将矩阵中的一个单元格与另一个矩阵中的所有单元格进行比较,并将结果存储在第三个矩阵中,matlab,Matlab,我想比较矩阵X中的所有单元格坐标,这样每个单元格都会与另一个名为Yint的矩阵中的所有坐标进行比较(Yint包含两列和65行,每行代表一个单元格的坐标(X,y)) 如果X中某个单元格的坐标等于Yint中的任何坐标,则将1或0存储在称为标签的第三个矩阵中 Yint中的第33行只是Yint矩阵中的一个标志,这就是我忽略它的原因 问题是标签矩阵总是给我零。我觉得我的代码有问题。知道X中有一些值应该满足条件,并在标签矩阵中存储1 labels = zeros(65536, 1); Yint= rou

我想比较矩阵X中的所有单元格坐标,这样每个单元格都会与另一个名为Yint的矩阵中的所有坐标进行比较(Yint包含两列和65行,每行代表一个单元格的坐标(X,y))

如果X中某个单元格的坐标等于Yint中的任何坐标,则将1或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列:

银币:65 X 2

X:256 X 256

标签:65536x1

一个简化的例子:

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]

对于给定的示例和预期结果,这应该是可行的:

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

比较标准是什么?请详细说明
if
条件应该表达什么,因为这是问题最明显的地方。我更新了问题。对不起,我仍然不清楚,你能给出一个输入数据和想要得到的输出的例子吗?好的,我们想找到心脏中的左心室,所以输入是心脏图像(X)我们已经知道左心室(Yint)的坐标,目标是在X中搜索这些坐标,如果找到,则在矩阵标签65536x1中存储1(所有X的坐标以线性顺序),否则为0。第33行是区分心内膜和心外膜轮廓。不知道
sub2in
,您的解决方案肯定比mine@m.s.这是一项基本功能。。顺便说一句,我最近也学到了这一点:(我想你的代码需要重塑以匹配OP.@m.s.给出的输出。当我用你的代码替换我的代码时,我遇到了两个错误:使用sub2ind:Out-range下标时出错。LV(第91行)中的错误:Yind=sub2ind(size(X),Yint(:,1),Yint(:,2));@SanthanSalai是的,你的代码现在运行得很好。问题是Yint中第33行的坐标是(0,0),所以他们导致了错误。知道如何跳过它吗?非常感谢你们,你们真的帮了很多忙。关于第33行,我用现有的坐标替换了(0,0)Yint。