目前我有一个程序,它通过一个矢量坐标列表,并对两个向量执行一个简单的数学函数,但我想在一个循环内部做一个循环,以便能够对发生的事情有更多的控制,这个到目前为止是我的计划:
import operator
import numpy as np
b = 0
a = 1
for a in range(0,56):
vector1 = (int(l[b][0]),int(l[b][1]),int(l[b][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
a += 1
但我想要的是,一旦命中56并完成最终的运行,我希望B加1和a重置为零,并重做操作循环直到b上升到55.
期望的输出: coordiantes的例子:
Cu 46.7176 27.1121 27.1121
Cu 43.2505 36.0618 32.4879
Cu 43.3392 36.0964 28.9236
Cu 43.2509 37.8362 27.1091
Cu 34.4872 14.1794 16.5767
Cu 34.4103 16.0364 14.3521
Cu 32.7006 14.069 14.412
我希望第一个坐标用它下面的所有东西执行点积,然后返回然后从第二个坐标开始,并用它下面的所有东西执行点积,依此类推......
答案 0 :(得分:4)
你可以做一个嵌套的for循环。以下是你想要的:
for b in range(0, 56):
for a in range(0, 57):
答案 1 :(得分:3)
运行此项并查看您获得的内容(在您提出其他问题之前)
for b in range(56):
for a in range(57):
print "a:", a, "b:", b
回答评论中的问题:
您可以在内循环中使用b
作为参数
for b in range(56):
for a in range(b+1, 57):
print "a:", a, "b:", b
您可以尝试使用较小的范围在一个屏幕上查看所有结果
for b in range(6):
for a in range(b+1, 7):
print "a:", a, "b:", b
结果:
a: 1 b: 0
a: 2 b: 0
a: 3 b: 0
a: 4 b: 0
a: 5 b: 0
a: 6 b: 0
a: 2 b: 1
a: 3 b: 1
a: 4 b: 1
a: 5 b: 1
a: 6 b: 1
a: 3 b: 2
a: 4 b: 2
a: 5 b: 2
a: 6 b: 2
a: 4 b: 3
a: 5 b: 3
a: 6 b: 3
a: 5 b: 4
a: 6 b: 4
a: 6 b: 5
答案 2 :(得分:0)
您可以使用while循环而不是for循环:
b = 0
a = 0
while a <= 56 :
import operator
import numpy as np
vector1 = (int(l[b][0]), int(l[b][1]), int(l[b][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
if a == 56 :
b += 1
a = 0
else:
a += 1
if b == 55:
break
答案 3 :(得分:0)
如果我理解你的问题陈述,你有一个维度的二维矩阵(56,2),并且对于每一行,
或以集合表示法
{∑({(row_1 - row_0)^2 | row_1 ∈ Matrix}) | row_0 ∈ Matrix}
因为你已经在使用numpy,这是一个直接的解决方案
[np.sum((l - row)**2) for row in l]