【问题标题】:Evenly distribute set into larger one将集合均匀分布到更大的集合中
【发布时间】:2011-09-17 11:42:25
【问题描述】:

有人可以指出一些关于给定集合 n 的算法的阅读,它将把它的元素放在一个更大的集合 m 中,均匀分布(尽可能)。我计划对剩余的值进行插值。

所以我有一组 3 个元素,其中包含

    1 ,5 ,6 

我想将它尽可能均匀地分布在 10 个插槽的数据帧中,第一个和最后一个元素在新集合中是第一个和最后一个:

    1 [] [] [] 5 [] [] [] [] 6

提前致谢。

PS。我正在尝试使用 R

来实现这一目标

【问题讨论】:

  • “均匀分布”是什么意思?一个集合没有“间距”的概念。请编辑您的问题以包含示例。
  • 请根据您的情况定义集合。在大多数情况下,定义为“集合”的东西不能分发左右:en.wikipedia.org/wiki/Set_(mathematics)
  • 感谢您的帮助。我编辑了一个更具体的例子。
  • 不完全符合您的要求,但也许approxapproxfun 会更直接地回答您的潜在问题。

标签: algorithm r interpolation distribute


【解决方案1】:

我认为您应该使用术语“向量”,无论如何,它在 R 中具有解决此问题所需的位置和长度的概念。 (数学集合是无序的,所以没有位置解释,R 确实有集合运算符和函数。)

# Make up an empty vector:
vec <- vector("numeric", length=10)
# create a vector of items to place
 items <- c(1,5,6)
#Put the first one in the first empty "slot" and the last in the last/
 vec[1] <- items[1]
 vec[length(vec)] <- items[length(items)]
#Now find a positions for the remaining element(s)
 seq(1,length(vec), by=length(vec)/(length(items)-1))[-c(1,length(items))]
#[1] 6
# And place them (or it in this case) ....
  vec[ seq(1,length(vec), by=length(vec)/(length(items)-1))[
                        -c(1,length(items))] ] <- 
                              items[ -c(1,length(items)) ] 
 vec
# [1] 1 0 0 0 0 5 0 0 0 6

【讨论】:

    【解决方案2】:

    我考虑过回答您的问题,但后来我想到了最终目标,在我看来,生成具有均匀分布的较小向量的向量将不容易促进插值。以下为您提供插值向量。

    bigLength <- 10
    data <- c(1, 5, 6)
    n <- length(data) - 1
    breakLength <- bigLength / n
    breaks <- floor(rep(breakLength+1, n))
    breaks[1] <- breaks[1]-1
    extra <- bigLength %% n
    if (extra > 0) for(i in 1:extra) breaks[i] <- breaks[i]+1
    y <- unlist ( lapply(1:n, function(i){ 
       y <- seq(data[i], data[i+1], length.out = breaks[i])
       return(y[-1])
       }) )
    y <- c(data[1], y)
    y         
    

    【讨论】:

      【解决方案3】:

      即使在这里“集合”的概念有点奇怪,您也可能想做一些类似直方图归一化(有时称为对比度拉伸)或直方图均衡化的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-20
        • 1970-01-01
        • 2012-10-11
        • 1970-01-01
        • 2015-04-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多