代码之家  ›  专栏  ›  技术社区  ›  student_R123

使用Python计算向量的中点

  •  0
  • student_R123  · 技术社区  · 6 年前

    我从零开始学习python。我在做下面的问题时遇到了一些问题。

    我有下面的向量, x_vector = (0,1,2,3,4,5,6,7,8,9) . 使用这个向量,我需要创建一个新的向量 x1 = (-0.5,0.5,1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5)

    基本上,所需的向量应该有第一个元素-0.5,每个元素和最后一个元素之间的中点+0.5。

    我尝试的代码如下:

    import numpy as np
    x_vector=np.array([0,1,2,3,4,5,6,7,8,9])
    x=len(x_vector)
    mid=np.zeros(x+1)
    
    for i in range (0,x):
        if i==0 :
            mid[i]= x_vector[i]-0.5
        else :
            mid[i]=(x_vector[i] + x_vector[i+1])/2
            i +=1
    

    似乎这并没有给出期望的输出。你能帮我弄清楚我该怎么做才能得到正确的输出吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Sebastian Kreft    6 年前

    目前还不清楚这是否是一个家庭作业,但鉴于你正在使用 numpy 我认为这是公平的游戏,利用它的全部潜力,在这种情况下,你可以做:

    import numpy as np
    x_vector=np.array([0,1,2,3,4,5,6,7,8,9]) 
    a = np.insert(x, 0, x[0] - 1)
    b = np.append(x, x[-1] + 1)
    mid = (a + b) / 2
    
        2
  •  3
  •   Chris    6 年前

    使用 itertools.pairwise

    from itertools import tee
    
    def pairwise(iterable):
        "s -> (s0,s1), (s1,s2), (s2, s3), ..."
        a, b = tee(iterable)
        next(b, None)
        return zip(a, b)
    
    res = []
    res.append(min(x_vector)-0.5)
    res.append(max(x_vector)+0.5)
    res.extend([np.mean(z) for z in pairwise(x_vector)])
    sorted(res)
    

    [-0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]
    
        3
  •  3
  •   Radosław Cybulski    6 年前

    想想,会发生什么 i = 0 i = 1

    mid[0] = x_vector[0] - 0.5 # = -0.5
    mid[1] = (x_vector[1] + x_vector[2]) / 2 # (1 + 2) / 2 = 3 / 2 = 1 (or 1.5 if python3)
    

    索引不匹配。

    for i in range (0,x):
        if i == 0:
            mid[i] = x_vector[i]-0.5
        else :
            mid[i] = (x_vector[i - 1] + x_vector[i]) / 2.0
    

    注意,我将除法改为除以 2.0 而不是 2 -这将确保除法结果是double(带分数的数字)而不是integer(不带分数的数字,在python2中,除法两个整数将舍入为整数)。 i += 1 是多余的, i 变量输入 for loop 将更新(覆盖您的 += 1 语句)每个循环迭代。