正如我在之前的问题中所解释的那样:我有一个数据集,由三维欧几里德空间中的大量半随机点集合组成。在这个点集合中,我试图找到最接近点密度最高的区域的点。
如高性能标记所回答;
最直接的事情就是划分你的子集 欧几里得空间分解为许多小单位体积(体素)并计数 每一项有多少分。点数最多的体素 是点密度最高的地方。也许最初 将您的空间划分为 2 x 2 x 2 体素,然后选择体素 最多的点和细分,直到你的标准是 满意。
Mark 建议我使用
triplequad
来实现此目的,但这不是我熟悉或理解的功能。有谁能告诉我如何在 Matlab 中使用这个函数来实现我想要做的事情吗?
例如,假设我有一个随机正态分布矩阵
A = randn([300,300,300])
,我如何使用triplequad
来找到我正在寻找的点?因为据我目前的了解,在使用它时,我还必须为 triplequad
提供一个函数 fun
。这个问题应该用哪个函数?
这是一个不使用
triplequad
的答案。
为了说明的目的,我定义了一个这样的数据数组:
A = rand([30,3])*10;
这给了我 30 分,均匀分布在方框中
(0:10,0:10,0:10)
。请注意,在本说明中,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
解决方案进行角力。希望在此期间一切顺利。