Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 立方体上的等距点

我需要初始化一些三维点,并且希望它们在整个多维数据集中均等地分布。有什么创造性的方法可以做到这一点吗?

我正在使用迭代的“期望最大化”算法,我希望我的初始向量能够均匀地“跨越”空间。

例如,假设我要在一个大小为1x1x1的立方体中平均分配八个点。我希望边长为0.333的立方体角的点位于较大立方体的中心。

下面是一个2D示例。请注意,红点彼此之间和边缘等距。对于3D,我也希望如此。



在点数没有整数立方根的情况下,可以在安排中保留一些“空白”。

目前,我正在计算点数的立方根,并以此来计算点数和它们之间的期望距离。然后,我遍历这些点并递增X,Y和Z坐标(交错排列,以使Y在X循环回到0之前不会递增,对于Z而言,对于Y而言也是一样)。

如果在MATLAB中有一种简便的方法,我很乐意使用它。


回答:
对于点数不是理想立方体的情况,您必须更详细地定义问题。但是,对于点数为立方体的情况,可以使用:

l=linspace(0,1,n+2); x=l(2:n+1); y=x; z=x; [X, Y, Z] = meshgrid(x, y, z); 然后,对于矩阵中的每个位置,该点的坐标由X,Y和Z的相应元素给出。如果要在单个矩阵中列出这些点,以使每一行代表一个点,则三列对于x,y和z坐标,则可以说:

points(:,1) = reshape(X, [], 1); points(:,2) = reshape(Y, [], 1); points(:,3) = reshape(Z, [], 1); 现在,您将在整个单位多维数据集中的网格上获得n^3个点的列表,不包括边界。正如其他人所建议的,如果您想要更少的点,则可以随机删除一些点。通过使用randi([0 n^3], a, 1)生成要删除的点a索引,这将很容易做到。 (不要忘记检查randi()返回的矩阵中是否有重复项,否则您可能不会删除足够的点。)



更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 22:50


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.