2017-02-18 67 views
0

我有不同长度的多个数组,我希望这些数据被平均为可比数组,例如,平均数组到相同的固定长度

array1 = np.array([1, 2, 3, 4, 5]) 
array2 = np.array([1, 2, 3, 4]) 
target_length = 3 
def cast(array, target_length): 
    ... 

这应该给cast(array1, target_length)为:

np.array([(1+2*0.66)/1.66, (2*0.33+3*1+4*0.33)/1.66, (4*0.66+5)/1.66 ])

因为:5/3 = 1.66。还我们将获得: cast(array1, target_length)为:

np.array([(1+2*0.33)/1.33, (2*0.66+3*0.66)/1.33, (3*0.33+4)/1.33])

,因为:4/3 = 1.33。

阵列将永远不需要增长,因为这个解决方案可用。

是否有使用numpy库的解决方案?

+0

什么是您将应用的通用公式?什么时候阵列需要增长,如果它的目标长度是1,... – trincot

+1

你需要更清楚一点,不知道你想要做什么。 – PrestonH

+0

我更新了我的答案。阵列不会增长。该策略是用'target_length'分割数组长度以获得阈值,然后部分地添加这些值直到获得阈值。 –

回答

2

的问题可以在几个不同的方式来阅读,但如果我这样做是正确,你要实现的目标是

def cast(array, target_length): 
    target = np.zeros(target_length) 
    for i in range(target_length*len(array)): 
     target[i//len(array)] += array[i//target_length]/len(array) 
    return target 

如果这是你的目标是什么,这可以通过获得numpy作为

def cast(array, target_length): 
    return np.mean(np.repeat(array, target_length).reshape(-1, len(array)), 1) 
+0

问题问“是否有使用numpy库的解决方案?”你的答案基本上是:“不”,对吧? – MSeifert

+0

@MSeifert:因为他们想要得到一个'np.array'作为返回类型,所以不管你使用哪种解决方案,避免使用'numpy'可能会很困难。 (我更新了答案,以便在不改变计算的情况下明确指出) – fuglede

+1

这不是关于返回类型,而是关于问题的向量化。你的解决方案在numpy数组上比在python列表上慢。这就是我眼中的非结块解决方案。 – MSeifert