使用Python计算向量的中点

时间:2019-07-12 04:22:55

标签: python for-loop if-statement

我开始从零开始学习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

似乎这样无法提供所需的输出。可以帮我弄清楚我该怎么做才能获得正确的输出?

3 个答案:

答案 0 :(得分:3)

使用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]

答案 1 :(得分:3)

考虑一下,i = 0i = 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(带分数的数字)而不是整数(带分数的数字), python 2除法两个整数将舍入为整数)。 此外,i += 1是冗余的,i中的for loop变量将在每次循环迭代时更新(覆盖+= 1语句)。

答案 2 :(得分:2)

尚不清楚这是否是一项家庭作业,但是鉴于您正在使用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