Matlab中使用容差为类似数据点求平均值

        如何使用 uniquetol 来为具有类似(在容差范围内)的 x 和 y 坐标的三维点求平均 z 坐标。

        使用通过 peaks 函数在 [−3,3]×[−3,3] 域内选取的随机点作为数据集。向数据中添加少量干扰。

xy = rand(10000,2)*6-3; 
z = peaks(xy(:,1),xy(:,2)) + 0.5-rand(10000,1);
A = [xy z];
plot3(A(:,1), A(:,2), A(:,3), '.')
view(-28,32)

        使用以下选项,通过 uniquetol 查找具有类似 x 和 y 坐标的点:

  • 将 ByRows 指定为 true,因为 A 的行包含点坐标。

  • 将 OutputAllIndices 指定为 true,以返回在彼此容差范围内的所有点的索引。

  • 将 DataScale 指定为 [1 1 Inf],以将绝对容差用于 x 和 y 坐标,同时忽略 z 坐标。

DS = [1 1 Inf];
[C,ia] = uniquetol(A, 0.3, 'ByRows', true, ...
    'OutputAllIndices', true, 'DataScale', DS);

        为在容差范围内的每组点求平均值(包括 z 坐标),从而生成仍保持原始数据大致形状的约简数据集。

for k = 1:length(ia)
    aveA(k,:) = mean(A(ia{k},:),1); 
end

        在原始数据的上方标绘生成的平均点。

hold on
plot3(aveA(:,1), aveA(:,2), aveA(:,3), '.r', 'MarkerSize', 15)

        则:

xy = rand(10000,2)*6-3; 
z = peaks(xy(:,1),xy(:,2)) + 0.5-rand(10000,1);
A = [xy z];
plot3(A(:,1), A(:,2), A(:,3), '.')
view(-28,32)

DS = [1 1 Inf];
[C,ia] = uniquetol(A, 0.3, 'ByRows', true, ...
    'OutputAllIndices', true, 'DataScale', DS);

for k = 1:length(ia)
    aveA(k,:) = mean(A(ia{k},:),1); 
end

hold on
plot3(aveA(:,1), aveA(:,2), aveA(:,3), '.r', 'MarkerSize', 15)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值