gpt4 book ai didi

algorithm - 如何计算网格中的重心?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:39:13 24 4
gpt4 key购买 nike

给定一个包含 x*y 个单元格的网格(或表格)。每个单元格都包含一个值。大多数这些单元格的值为 0,但此网格上某处可能存在一个“热点”,其中的单元格具有高值。该单元格的邻居也有一个 > 0 的值。离热点越远,相应网格单元格中的值越低。

所以这个热点可以被看作是山顶,我们离这座山越远其值越小。在一定距离处,值再次下降到 0。

现在我需要确定网格中代表网格重心的单元格。在上面的简单示例中,这个质心只是具有最高值的一个单元格。然而,它并不总是那么简单:

  1. 热点单元格周围相邻单元格的递减值可能分布不均,或者“山的一侧”可能比另一侧更早下降到 0。

  2. 还有另一个热点/山,其值 > 0 elsewehere 在网格内。

我认为这是一个典型的问题。不幸的是,我不是数学专家,所以我不知道要搜索什么(至少我还没有在 Google 中找到答案)。

有什么办法可以解决这个问题吗?

提前致谢。

最佳答案

您正在寻找单元格值的“加权平均值”。假设每个单元格都有一个值 z(x,y),那么您可以执行以下操作

zx = sum( z(x, y) ) over all values of y
zy = sum( z(x, y) ) over all values of x

meanX = sum( x * zx(x)) / sum ( zx(x) )
meanY = sum( y * zy(y)) / sum ( zy(y) )

我相信您可以将其转换成您选择的语言...

例子:如果你懂Matlab,那么上面的写法如下

zx = sum( Z, 1 ); % sum all the rows
zy = sum( Z, 2 ); % sum all the columns

[ny nx] = size(Z); % find out the dimensions of Z

meanX = sum((1:nx).*zx) / sum(zx);
meanY = sum((1:ny).*zy) / sum(zy);

这将为您提供 1 .. nx 范围内的 meanX:如果它正好在中间,则该值为 (nx+1)/2。您显然可以根据自己的需要对其进行扩展。

编辑:再一次,在“几乎真实”的代码中:

// array Z(N, M) contains values on an evenly spaced grid
// assume base 1 arrays

zx = zeros(N);
zy = zeros(M);

// create X profile:
for jj = 1 to M
for ii = 1 to N
zx(jj) = zx(jj) + Z(ii, jj);
next ii
next jj

// create Y profile:
for ii = 1 to N
for jj = 1 to M
zy(ii) = zy(ii) + Z(ii, jj);
next jj
next ii

xsum = 0;
zxsum = 0;
for ii = 1 to N
zxsum += zx(ii);
xsum += ii * zx(ii);
next ii
xmean = xsum / zxsum;

ysum = 0;
zysum = 0;
for jj = 1 to M
zysum += zy(jj);
ysum += jj * zy(ii);
next jj
ymean = ysum / zysum;

关于algorithm - 如何计算网格中的重心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14658307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com