均匀地将集合分成较大的集合



谁能给我指出一些关于给定集合n的算法,将其元素放置在更大的集合m中,均匀间隔(尽可能多)。我计划对剩下的值进行插值。

我有一个包含

的3个元素的集合
    1 ,5 ,6 

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

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

提前感谢。

p。我正试图用R

实现这一点

我认为你应该使用术语"向量",无论如何,在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

我考虑回答你的问题,但后来我想到了最终目标,在我看来,用较小的均匀分布的向量生成你的向量将不容易促进插值。下面的代码可以得到插值向量。

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         

尽管"集合"的概念在这里有点奇怪,但您可能想要做一些类似直方图规范化(有时称为对比度拉伸)或直方图均衡化的事情。

相关内容

  • 没有找到相关文章

最新更新