将列表转换为具有更多或更少项目的列表,保持列表的总和以及项目之间的相对差异

Ben*_*ayo 0 python numpy

我有一个包含5个项目的列表

[6,4,2,4,6]
Run Code Online (Sandbox Code Playgroud)

如果我需要列表长度为10项,具有相同的总和和相对分布,它看起来就像

[3,3,2,2,1,1,2,2,3,3]
Run Code Online (Sandbox Code Playgroud)

这很简单,因为项目数量增加了一倍,我将上一个列表中的每个项目分成两半.

我正在试图找出一种方法,使第一个列表的任意数量的项目长.也许是3,7,12,999 ......

显然,通常不可能完美地完成它(如在简单的例子中),我试图找到一个提供最佳匹配的解决方案.

Sco*_*ton 5

IIUC,使用np.repeat:

a1 = np.array([6,4,2,4,6])
targ_len = 10 #Enter target length
len_arr = len(a1)
factor = targ_len / len_arr
a2 = np.repeat(a1, factor) / factor
Run Code Online (Sandbox Code Playgroud)

输出:

array([3., 3., 2., 2., 1., 1., 2., 2., 3., 3.])
Run Code Online (Sandbox Code Playgroud)