2014-05-17 42 views
3

我有一個載體省略一些值VEC - 它的長度是1774年,我需要做一個向量長度10將包含10個號碼VEC與像類似的步驟ñ如何在一個數組

n=[0, 178, 356, 534, 712, 890, 1068, 1246, 1424, 1602] 

第一和最後一個號碼不必是相同VEC。我嘗試:

# -*- coding: cp1250 -*- 
from __future__ import division 

newLength=10 
vec=range(1774) 

step=round(len(vec)/newLength); 

n=range(0,len(vec),int(step)) 

print n 
print len(n) 

但成果轉化爲長度11的矢量當我設置newLength = 22,然後我得到完全22.因此,它是四捨五入的問題(我也試過math.ceil和math.floor-它適用於newLength = 10,但不適用於newLength = 554)。有沒有其他方法如何獲得矢量n

謝謝

+1

你看着[這個問題](http://stackoverflow.com/questions/9873626/choose-m-evenly-spaced-elements-from-a-序列的長度N)? – jonrsharpe

+0

我試過了,但結果如下: <發生器對象在0x7f802317af00> 而不是任何數組。感謝您的回答。 –

+1

你可以使用'list(發生器)'將'generator'變成'list'。 – jonrsharpe

回答

1

想想這個:

  1. 你有1774個蘋果。
  2. 您想將蘋果分成554個相同大小的組。
  3. 組大小必須是1774/554 = 3.261。
  4. 您將組大小縮小並得到3.
  5. 您得到1774 // 3 = 591組。
  6. 你看這是錯誤的。
  7. 您決定取而代之並獲得4.
  8. 您得到1774 // 4 = 443個組。
  9. 你看這也是錯誤的。
  10. 你意識到你必須能夠擁有.261的蘋果。
  11. 您編寫代碼以促進此操作。
  12. 你決定舉辦派對,因爲你現在有1774 // 3.261 = 544組!

代碼:

new_length = 554 
vector = # some list 
step = len(vector)/new_length 
n = (i*step for i in range(new_length)) 
new_vector = [vector[int(round(i))] for i in n] 
0

好的,這裏是解決方案。 THX的jonrsharpe

from math import ceil 

def takespread(sequence, num): 
    length = float(len(sequence)) 
    for i in range(num): 
     yield sequence[int(ceil(i * length/num))] 

if __name__=="__main__": 
    newLength=55 
    vec=range(1774) 

    print len(list(takespread(vec, newLength)))