正如我之前在question中所解释的那样:我有一个由三维欧几里德空间中的大型半随机点集合组成的数据集。在这个点集合中,我试图找到最接近点密度最高的区域的点。
最直接的做法是划分你的子集 欧几里德空间分为许多小单位体积(体素)和数量 每个人有多少分。点数最高的体素 是点密度最高的地方。也许最初 将您的空间划分为2 x 2 x 2体素,然后选择体素 最多的点和细分,反过来,直到你的标准 满意。
Mark建议我使用triplequad
,但这不是我熟悉的功能,也不是很了解。有没有人有任何关于我如何在Matlab中使用此函数的指示我想要做什么?
例如,假设我有一个随机正态分布矩阵A = randn([300,300,300])
,我如何使用triplequad
找到我要找的点?因为据我所知,我在使用时还必须为triplequad
提供函数fun
。这个问题应该是哪个函数?
答案 0 :(得分:2)
这是一个不使用triplequad
的答案。
为了说明的目的,我定义了一个这样的数据数组:
A = rand([30,3])*10;
这使得我在框(0:10,0:10,0:10)
中均匀分布了30个点。请注意,在此说明中,3D空间中的点由A
中的每一行表示。现在为每个体素中的点数定义一个3D数组:
counts = zeros(10,10,10)
这里我选择了一个10x10x10的体素阵列,但这只是为了方便,在每个维度中选择一些其他数量的体素只会有点困难,而且没有必要沿每个轴是相同数量的体素。然后代码
for ix = 1:size(A,1)
counts(ceil(A(ix,1)),ceil(A(ix,2)),ceil(A(ix,3))) = counts(ceil(A(ix,1)),ceil(A(ix,2)),ceil(A(ix,3)))+1
end
将计算counts
中每个体素中的点数。
修改强>
不幸的是,今天下午我必须做一些工作,直到稍后才能回到triplequad
解决方案。希望在此期间这是可以的。