我开始从零开始学习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
似乎这样无法提供所需的输出。可以帮我弄清楚我该怎么做才能获得正确的输出?
答案 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 = 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(带分数的数字)而不是整数(带分数的数字), 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