2017-02-18 58 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