首页 文章

MATLAB - 与向量的相关性

提问于
浏览
1

我有两个不同大小的矢量XYZ . 我们可以称之为Data1和Data2,其中:

Data1 = [1000 3:55 2000; ...
          950 2200 4.5; ...
         1050 2350 5.5; ...
         1025 2500 6; ...
         1075 2600 7; ...
         1000 2700 8];

Data2 = [1000 2650 7.95; ...
         1000 2750 8.16; ...
         1000 2700 9; ...
         1025 3000 10];

点之间的最小可接受差异是位置(X,Y)100米和深度(Z)0.2 .

在这种情况下,矢量之间的点将是P_Data1 = [1000 2700 8]和P_Data2 = [1000 2650 7.95],因为距离是可接受的并且深度是最接近的 .

有没有人知道可以做这种关联的功能来帮助我?我认为在Matalab中有一些问题的功能和高性能,因为我将为数千个点进行此计算 .

我目前正在使用嵌套循环,但性能非常差,因为我计算所有距离,然后计算每个点的深度之间的所有差异并过滤矩阵 .

简而言之,我想找到两个不同大小的矢量之间具有较低和较低深度的点到定义的范围 .

谢谢你的帮助!

1 回答

  • 1
    Data1 = [950 2200 4.5; ...
             1050 2350 5.5; ...
             1025 2500 6; ...
             1075 2600 7; ...
             1000 2700 8];
    
    Data2 = [1000 2650 7.95; ...
             1000 2750 8.16; ...
             1000 2700 9; ...
             1025 3000 10];
    
    vec1 = Data1(:,3);
    vec2 = Data2(:,3);
    [p,q] = meshgrid(vec1, vec2);
    output1 = 0; %initial set
    
    while output1 == 0
    sub = [abs(p(:)-q(:))];
    [M,I] = min(sub);
    IndData1 = floor(I/4);
    IndData2 = mod(I,IndData1);
    
    %this basically computes the smallest possible Z 
    %Check if it works for condition 2:
    checkcolumn1 = abs(Data1(IndData1,1) - Data2(IndData2,1));
    checkcolumn2 = abs(Data1(IndData1,2) - Data2(IndData2,2));
    if checkcolumn1 < 200 && checkcolumn2 <200
       output1 = Data1(IndData1,:);
       output2 = Data2(IndData2,:);
    else
    min(sub) = 1000000 %huge high number to basically remove the min
    end
    end
    

    所以这个程序应该按照你的要求做,基本上,它首先计算Z列的最小值,你可以添加一个必须小于0.2的条件,我只是假设必须有一些小于0.2 . 然后它试图查看是否可以满足第一个条件 . 虽然它使用循环进行搜索,但它实际上非常有效,因为一旦找到正确的值,它就会跳出循环 .

相关问题