gpt4 book ai didi

r - 坐标变换的缩放

转载 作者:行者123 更新时间:2023-12-03 17:40:06 24 4
gpt4 key购买 nike

我在矩形空间中有一组点。缩放 x 坐标,使其以 0 为中心:

#original points
x <- scale(runif(10000, min= 0, max= 1000), scale=FALSE)
y <- runif(10000, min= 0, max= 750)

plot(x, y, pch='.')

plot_1

我想将这些点缩放成抛物线,以便接近 y= 0 的点的 x 值比 y= 750 附近的 x 值更接近,基本上扭曲了图像:
#SC = scale
SC <- 0
x_scale = x * (y + SC)
y_scale = y * (y + SC)

plot(x_scale,y_scale, pch='.')

plot_2

但是,有时我不想要完整的抛物线。我希望有一点缓冲:
SC <- 200 
x_scale_200 = x * (y + SC)
y_scale_200 = y * (y + SC)

plot(x_scale_200, y_scale_200, pch='.')

plot_3

SC接近无穷大,绘制的空间接近原始矩形:
SC <- 10000
x_scale_10k = x * (y + SC)
y_scale_10k = y * (y + SC)

plot(x_scale_10k, y_scale_10k, pch='.')

plot_4

我想创建一个变量 T , 缩放 SC从0到1。我基本上不知道翘曲程度如何变化为 SC变大。

在我看来,一个函数指定 T = 0将导致抛物线,其中 T = 1将导致一个矩形。我可以乘以 T乘以 10,000 并使用它(只是假设结果足够接近矩形),但是 T = 0 之间的差异和 T = 0.1将远大于 T = 0.9 之间的差异和 T = 1.0 .我要 T线性缩放“翘曲”的程度。对(线性缩放)的数学关系有点迷茫 T翘曲可能是以及如何在此处编码。

我考虑在数学论坛上发布这个,但认为它仍然足够适合 stackoverflow。

最佳答案

虽然我最初从未解决过这个问题(事实证明我不需要),但我只是碰巧(4 年后)解决了这个问题,答案对我来说似乎很明显。

一种解决方案是使用 logit 函数来转换输入(在这种情况下,需要使用 0.5 到 1 而不是 0 到 1,但这也可以缩放。因为 R 不喜欢 Inf(logit 的结果) (1)),必须从 1 中减去一个小值。然后将其缩放 1000(根据一些摆弄选择)以从抛物线缩放到矩形。

sc_fun <- function(x)
{
if (x == 1)
{
x1 <- x - 0.0000000000001
} else {
x1 <- x
}
SC <- boot::logit(x1) * 1000

return(SC)
}

SC <- sc_fun(0.5)

x_scale_fun = x * (y + SC)
y_scale_fun = y * (y + SC)
plot(x_scale_fun, y_scale_fun, pch='.')

SC <- sc_fun(1)

x_scale_fun = x * (y + SC)
y_scale_fun = y * (y + SC)
plot(x_scale_fun, y_scale_fun, pch='.')

关于r - 坐标变换的缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38587812/

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