使用三重四阶计算密度(在Matlab中)

问题描述 投票:0回答:1

正如我在之前的问题中所解释的那样:我有一个数据集,由三维欧几里德空间中的大量半随机点集合组成。在这个点集合中,我试图找到最接近点密度最高的区域的点。

高性能标记所回答;

最直接的事情就是划分你的子集 欧几里得空间分解为许多小单位体积(体素)并计数 每一项有多少分。点数最多的体素 是点密度最高的地方。也许最初 将您的空间划分为 2 x 2 x 2 体素,然后选择体素 最多的点和细分,直到你的标准是 满意。

Mark 建议我使用

triplequad
来实现此目的,但这不是我熟悉或理解的功能。有谁能告诉我如何在 Matlab 中使用这个函数来实现我想要做的事情吗?


例如,假设我有一个随机正态分布矩阵

A = randn([300,300,300])
,我如何使用
triplequad
来找到我正在寻找的点?因为据我目前的了解,在使用它时,我还必须为
triplequad
提供一个函数
fun
。这个问题应该用哪个函数?

matlab distribution numerical-integration
1个回答
2
投票

这是一个不使用

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
解决方案进行角力。希望在此期间一切顺利。

© www.soinside.com 2019 - 2024. All rights reserved.