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_Mean - Fatal编程技术网

matlab中多行(点)的平均值

matlab中多行(点)的平均值,matlab,mean,Matlab,Mean,我有一个名为data的矩阵,它有x,y,z个位置。 我用pdist计算了所有点之间的距离,得到了矩阵out,它有x的diff,y的diff和z的diff,以及它们对应的行 A= data; D1= pdist(A(:,1)); D2= pdist(A(:,2)); D3= pdist(A(:,3)); D = [D1' D2' D3']; tmp = ones(size(A,1)); tmp = tril(tmp,-1); [rowIdx,colIdx ] = find(tmp); out

我有一个名为data的矩阵,它有x,y,z个位置。 我用pdist计算了所有点之间的距离,得到了矩阵out,它有x的diff,y的diff和z的diff,以及它们对应的行

A= data;
D1= pdist(A(:,1));
D2= pdist(A(:,2));
D3= pdist(A(:,3));
D = [D1' D2' D3'];


tmp = ones(size(A,1));
tmp = tril(tmp,-1);
[rowIdx,colIdx ] = find(tmp);
out = [D,A(rowIdx,:),A(colIdx,:)];
我想计算满足某些条件的所有点的平均值:
diff z 7+diff z的点的平均值假设您想要diff z的所有点的平均值,那么diff z<7的点是什么意思?计算每个点与每个点之间的差值。所以每个点都有不同的z倍。你是说每个点至少有一个差z<7?或者你是指所有差值小于7的每个点?@Steffen:对于z值差值为的所有点,假设你有z值[1,5,10]。你是说只有第五点?假设有z-valzes[1,2,3,4,5100]。你是说没有?我理解对了吗?如果我有x,y,z10233,1245,22510。然后我想在输出1中有两点。平均值为10 23 3和12 24 5[因为差异z为2,即7]。注:最后两点的差异Z为5,但我们不会考虑,因为其他条件:差异XOK。更清楚一点。假设x,y,zp1=0,0,0,p2=0,0,5,p3=0,0,10。差x很好,所以集中精力在z上。diffp1,p2是5。因此,使用这两点。diffp2,p3是5。所以使用p2和p3。diffp1,p3是10。所以不要使用p1和p3。-你希望得到什么样的平均值?:a平均值p1,p2,p3;或者b是p2或者c是P1,p2,p2,P3谢谢。我找不到更好的方法来存储积分。我确实面临使用unique的问题。有没有其他方法来储存它们?现在第4、5和6列是x1、y1、z1,第7、8、9列是x2、y2、z2。我应该如何实现“PointIndexes=outcondition,4:5;”?请帮助@JonasAlso,我使用上面的代码得到以下错误:下标索引必须是实正整数或逻辑数。平均坐标误差=平均初始值,1@Jonas@nabaneetamukhopadhyay:查看我的编辑。您可以存储rowIdx和colIdx,并使用它们索引到坐标数组A中,而不是将点坐标存储在out中。但是,只有当1只需要唯一点的平均值,2可能是A中的多个点具有相同的坐标时,这才是真正必要的。如果我运行'coords=[状况,4:6;状况,7:9];,它返回我开始使用的数据集。我编辑了我的问题并提供了我的初始数据。另外,我在对另一个答案的评论中澄清了我的确切问题。你能帮忙吗?@JonasI在我的数据集上尝试了它。它只返回一个点作为答案。我编辑了我的问题并提供了我的数据集。我已经获取了x y值对于每个z,我得到了一些重复的x,y值,不是唯一的值,而是附近的值,即diff x和diff y
a= find (out(:,3)>0);
cal=out(a,:);
b= cal(:,3)<7;
cal2 = cal(b,:);

[s,k]= size (cal2);


for i=1:s

    if (cal2(i,1) < 4) && (cal2(i,2) < 4);

        xmean = mean (cal2(i,[4,7]));
        ymean = mean (cal2(i,[5,8]));
        zmean = mean (cal2(i,[6,9]));
        fd = [xmean ymean zmean];


    end
end
%# this is true for all points you want to average
condition = out(:,1) > 4 & out(:,2) > 4 & out(:,3) < 7;

%# get coordinates satisfying the condition; create a 2n-by-3 array
coords = [out(condition, 4:6);out(condition, 7:9)];

%# if you don't want to count coordinates multiple times when taking the average, run 
%# coords = unique(coords,'rows');

%# average
meanCoordinates = mean(coords,1);
A = [0,0,0;0,0,5;0,0,10];

% create matrices with the distances 
% [p1-p1, p1-p2, p1-p3;
%  p2-p1, p2-p2, p2-p3;
%  p3-p1, p3-p2, p3-p3];
dx= squareform(pdist(A(:,1)));
dy= squareform(pdist(A(:,2)));
dz= squareform(pdist(A(:,3)));
% dz = [0,5,10;5,0,5;10,5,0];

% select all points stisfying condition
idx = dx < 4 & dy < 4 & dz < 7;
% remove entries of the main diagonal
idx(sub2ind(size(idx),1:size(A,1),1:size(A,1))) = 0;
% select all indices. Since all distances are 2 times in the full matrix,
% only r or c is needed
[r,c] = find(idx==1);
% r = [2,1,3,2]; c = [1,2,2,3]

meanOfPoints = mean(A(r,:))