Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python计算向量的中点_Python_For Loop_If Statement - Fatal编程技术网

使用Python计算向量的中点

使用Python计算向量的中点,python,for-loop,if-statement,Python,For Loop,If Statement,我从零开始学习python。我在做下面的问题时遇到了一些问题 我有以下向量,x_向量=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(

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

我有以下向量,x_向量=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
似乎这并没有给出期望的输出。您能帮我弄清楚如何才能获得正确的输出吗?

使用itertools.pairwise:

输出:

[-0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]

考虑一下,在循环中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除-这将确保除法结果是带分数的双倍数,而不是不带分数的整数,在python 2除法中,两个整数将取整为整数。
此外,i+=1是多余的,for循环中的i变量将在每次循环迭代时更新,覆盖您的+=1语句。

不清楚这是否是一个家庭作业,但考虑到您使用的是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

无论何时插入和追加,我都会说您没有充分利用numpy的潜力,但这是一个很好的总体方法。谢谢您的详细回答。我学到了很多。但是你建议的代码似乎没有提供9.5,这是向量的最后一个元素。你能提供一些建议吗?使用@Sebastian Kreft solution,因为你已经决定使用numpy,因为他的解决方案是最numpy est的。我只是想解释一下,为什么你的代码没有产生你认为应该产生的结果。@Radosław Cybulski,谢谢你的评论。我刚刚在您建议的代码段中添加了mid[I+1]=x_vector[I]+0.5,看起来效果不错。
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