如何省略数组中的某些值

时间:2014-05-17 10:52:38

标签: python arrays

我有一个向量 vec -it的长度是1774.我需要制作一个长度为10的向量 n ,其中包含10个< strong> 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

由于

2 个答案:

答案 0 :(得分: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个小组!
  13. 代码:

    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]
    

答案 1 :(得分:0)

好的,这是解决方案。感谢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)))