Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Arrays matlab/octave阵列中差分的获取与比较_Arrays_Matlab_Multidimensional Array_Octave - Fatal编程技术网

Arrays matlab/octave阵列中差分的获取与比较

Arrays matlab/octave阵列中差分的获取与比较,arrays,matlab,multidimensional-array,octave,Arrays,Matlab,Multidimensional Array,Octave,我有两个数组A和B,我想找到A中第一列中与B中第一列中的值最接近的值,并按差异/接近度对它们进行排序 dist = abs(diff(C')); [~, order] = sort(dist); C = C(order,:); [min_val,min_ind] = min(pdist2(A(:,1),B(:,1))) 示例:A为29x2,B为14x2 A=[0, 2; 408, 642; 492, 66; 1527, 108; 1560, 16; 1755, 182; 1809, 10;

我有两个数组A和B,我想找到A中第一列中与B中第一列中的值最接近的值,并按差异/接近度对它们进行排序

dist = abs(diff(C'));
[~, order] = sort(dist);
C = C(order,:);
[min_val,min_ind] = min(pdist2(A(:,1),B(:,1)))
示例:A为29x2,B为14x2

A=[0, 2;
408, 642;
492, 66;
1527, 108;
1560, 16;
1755, 182;
1809, 10;
2133, 42;
2235, 444;
2289, 4191;
2334, 86;
2661, 22;
2709, 2;
2787, 2652;
3072, 200;
3081, 110;
3147, 638;
3963, 10;
4080, 2;
4332, 1674;
4462, 14;
5148, 1042;
5649, 8;
5895, 44;
6078, 284;
6315, 2;
6989, 4;
7485, 46;
7623, 3458;
];


B= [0, 2;
165, 2114;
572, 122;
576, 5416;
581, 176;
583, 278;
653, 28;
655, 4;
656, 154;
657, 16;
658, 4188;
665, 3475;
903, 20;
1145, 8;
]
[min_val,min_ind] = min(pdist2(A(:,1),B(:,1)))
最后的数组需要按其中最接近/最近的x值(第1列)排序。 因此,当生成C数组时,它将具有[0,0;492572]等..

[min_val,min_ind] = min(pdist2(A(:,1),B(:,1)))
我包括了两个图来给出一个图形示例。第一个图显示A和B的所有数据点,以星形和圆形表示,第二个图放大以显示阵列之间最近的点 最后一个数组将包含用橙色圈起来的项(请忽略绘图中的y轴,我只关心这些值在x轴上的接近程度)

[min_val,min_ind] = min(pdist2(A(:,1),B(:,1)))
如何使用matlab/octave创建C数组

[min_val,min_ind] = min(pdist2(A(:,1),B(:,1)))

[min_val,min_ind] = min(pdist2(A(:,1),B(:,1)))

要找到A中与B中每个值对应的最近点,请使用
interp1
最近点
模式

AnearB = interp1(A(:,1), A(:,1), B(:,1), 'nearest');
C = [AnearB B(:,1)];
[min_val,min_ind] = min(pdist2(A(:,1),B(:,1)))
然后按贴近度对结果进行排序

dist = abs(diff(C'));
[~, order] = sort(dist);
C = C(order,:);
[min_val,min_ind] = min(pdist2(A(:,1),B(:,1)))
样本数据的结果

[min_val,min_ind] = min(pdist2(A(:,1),B(:,1)))
方法-

%// Find the minimum absolute diferences and corresponding indices for each
%// element in the first column of B against all other elements in the 
%// first column of A.
[min_val,min_ind] = min(abs(bsxfun(@minus,A(:,1),B(:,1)'))) %//'

%// Find the sorted indices for the minimum absolute diferences
[~,sorted_ind] = sort(min_val)

%// Index into A using min_ind to assciate each element in the first
%// column of B against the corresponding closest element in the first
%// column of A.
C = [A(min_ind,1) B(:,1)]

%// Sort rows of C acoording to sorted_indices to have the desired output
C = C(sorted_ind,:)
[min_val,min_ind] = min(pdist2(A(:,1),B(:,1)))
使用[strong>
[两组观测值之间的成对距离]的替代方法只需对上述代码进行一次更改-

[min_val,min_ind] = min(pdist2(A(:,1),B(:,1)))

请注意,这种方法是时间和空间复杂度,而我的答案是时间复杂度和空间复杂度,其中
M=size(B,1)
N=size(a,1)
@BenVoigt感谢这些信息。那是不是也有
pdist2
?如果不是的话,你必须通过源代码找出相应的数字,对吗?@Divikar:我的分析很简单:有
M*N
pairwise距离,你的两种方法都会计算所有的距离。我的方法在一个排序数组中进行
M
最近邻查找,每个查找的代价为
log(N)
。对结果进行排序是
O(M*log(M))
,这比第一步便宜,因为
M
,所以不会出现在最后的复杂度中。对
A
矩阵进行排序将是
O(N*log(N))
,但验证它是否已排序只是
O(N)
。对于这种大小的数据集,两种方法之间可能几乎没有什么区别,因为我的常量项肯定更高。但对于一个拥有数万个点的数据集,差异应该非常明显。@BenVoigt您的点肯定有意义。再次感谢您提供这些有用的信息!