我遇到以下问题,这不完全是编程问题,但我希望有一个编程解决方案。我正在使用 R。
考虑以下向量
v <- c(2,3,6,1)
我希望将其调整为任意大小,但 sum(v) 应保持不变。实际上,我想拉伸(stretch)向量。例如,乘以因子 2:
v2 <- c(1,1,1.5,1.5,3,3,0.5,0.5)
当新向量是旧向量的倍数时,我们只需将元素相除即可。但是,它也应该适用于不是原始向量大小倍数的其他大小,例如150.
我想我可以使用线性插值之类的方法来实现此目的,但我现在想不出一个简单的解决方案。
最佳答案
好的,刚刚找到解决方案。我是 R 和数学新手;)
v <- seq(1,10)
这通过插入值来调整向量的大小:
v2 <- approx(v, n=33)$y
接下来,我们标准化以保留总和:
norm <- sum(v)/sum(v2)
v3 <- v2 * norm
在此示例中,v3 将是
[1] 0.3030303 0.3882576 0.4734848 0.5587121 0.6439394 0.7291667 0.8143939
[8] 0.8996212 0.9848485 1.0700758 1.1553030 1.2405303 1.3257576 1.4109848
[15] 1.4962121 1.5814394 1.6666667 1.7518939 1.8371212 1.9223485 2.0075758
[22] 2.0928030 2.1780303 2.2632576 2.3484848 2.4337121 2.5189394 2.6041667
[29] 2.6893939 2.7746212 2.8598485 2.9450758 3.0303030
关于通过重采样调整向量大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24162732/