作业问题写成:
编写一个称为unitVec的函数,该函数在连接空间中两个点(A和B)的线的方向上确定单位矢量。该函数应将两个向量(列表)作为输入,每个向量都具有空间中一个点的坐标。输出应该是一个向量(列表),其单位向量的分量沿从A到B的方向。如果点A和B分别具有两个坐标(即它们位于xy平面中),则输出向量应具有两个坐标元素。如果点A和B分别具有三个坐标(即它们位于一般空间中),则输出向量应具有三个元素。
我基本上已经编写了全部代码,但是我一生都无法弄清楚如何对列表中称为connect []的每个元素求平方。
要计算单位向量,程序将把向量B中的元素与向量A中的相应元素相减,并使用这些值创建一个新列表(connects [])。然后,每个元素都需要平方,并且都需要加在一起。然后,将采用该数字的平方根,并将connects []中的每个元素除以该数字,并将其存储在新列表中,该列表将作为单位向量。 我正在尝试通过使用线
在connect []中添加元素的平方add = add + (connects[i]**2)
但是我知道这只会返回两次列表。我其余的代码很好,我只需要帮助平方这些元素即可。
from math import *
vecA = []
vecB = []
unitV = []
connects = []
vec = []
elements = int(input("How many elements will your vectors contain?"))
for i in range(0,elements):
A = float(input("Enter element for vector A:"))
vecA.append(A)
B = float(input("Enter element for vector B:"))
vecB.append(B)
def unitVec(vecA,vecB):
for i in range(0,elements):
unit = 0
add = 0
connect = vecB[i] - vecA[i]
connects.append(connect)
add = add + (connects[i]**2)
uVec = sqrt(add)
result = connects[i]/uVec
unitV.append(result)
return unitV
print("The unit vector connecting your two vectors is:",unitVec(vecA,vecB))
答案 0 :(得分:1)
您需要将功能更改为以下内容:
def unitVec(vecA,vecB):
add = 0
for i in range(0, elements):
unit = 0
connect = vecB[i] - vecA[i]
connects.append(connect)
add = add + (connect**2)
uVec = sqrt(add)
unitV = [val/uVec for val in connects]
return unitV
您无法在单个for循环中完成所有操作,因为您需要先添加所有差异,然后才能获得平方根。然后,您可以将差异除以uVec
。
答案 1 :(得分:0)
python的列表是通用的,其算术运算与矢量运算不同。例如,[1,2,3] * 2是复制运算,而不是矢量标量乘法,因此结果是[1,2,3,1,2,3]而不是[2,4,6]。 我将使用为数字数组设计的numpy数组,并提供向量运算。
import numpy as np
a = [1,2,3]
# convert python list into numpy array
b = np.array(a)
# vector magnitude
magnitude = np.sqrt((b**2).sum()) # sqrt( sum(b_i^2))
# or
magnitude = (b**2).sum()**0.5 # sqrt( sum(b_i^2))
# unit vector calculation
unit_b = b/magnitude