目前我有一个程序可以找到两个XYZ坐标的点积,我怎么把它放到一个循环中,这样它就会在坐标列表中找到并找到每个坐标相对于第一个坐标的点积。
import operator
vector1 = (int(l[0][0]),int(l[0][1]),int(l[0][2]))
vector2 = (int(l[1][0]),int(l[1][1]),int(l[1][2]))
dotProduct = reduce(operator.add, map(operator.mul, vector1, vector2))
print dotProduct
所以我希望第一个矢量保持不变,但第二个矢量要改变,从int(l[1][0]),int(l[1][1]),int(l[1][2])
到下一个坐标int(2[1][0]),int(2[1][1]),int(2[1][2])
。
我是一名使用Python的初学者,所以我知道这可能是一个非常简单的答案,但任何反馈都会非常感激。
l=[]
with open("coordinate_test") as f:
line = f.next()
nat = int(line.split()[0])
print nat
f.next()# skip headers
for line in f:
if line.strip():
l.append(map(float,line.split()[1:])) # make all values floats
print l[0][0]
import operator
import numpy as np
vector1 = (int(l[0][0]),int(l[0][1]),int(l[0][2]))
vector2 = (int(l[a][0]),int(l[a][1]),int(l[a][2]))
print vector1
print vector2
x = vector1
y = vector2
vector3 = list(np.array(x) - np.array(y))
print vector3
dotProduct = reduce( operator.add, map( operator.mul, vector3, vector3))
print dotProduct
所以我有变量nat,这是我想要点积循环运行的次数(导入运算符下的东西),但是如何让它运行多次以及如何使变量“a “每次都去一个,我如何设置该变量的起始值”a“。
感谢。
答案 0 :(得分:2)
import operator
vector1 = (1, 2, 3)
# get a list of vectors
vectors = [
(4, 5, 6),
(7, 8, 9)
]
# for loop through the vectors,
# assignig the current vector to vector2 in every iteration
for vector2 in vectors:
dotProduct = reduce(operator.add, map(operator.mul, vector1, vector2))
print dotProduct
使用您的l
,nat
和a
变量:
vector1 = (int(l[0][0]), int(l[0][1]), int(l[0][2]))
for a in range(1, nat):
vector2 = (int(l[a][0]), int(l[a][1]), int(l[a][2]))
dotProduct = reduce(operator.add, map(operator.mul, vector1, vector2))
print(dotProduct)
答案 1 :(得分:1)
import numpy
v0 = (6,7,6)
vectors = numpy.array([[1,2,3],[4,5,6],[7,8,9]])
dot_products = vectors.dot(v0)
是迄今为止最简单的方法来做你想做的事情imho
如果你有很多"它应该快得多。向量列表中的向量...(对于很多的一些定义)