gpt4 book ai didi

python - 我如何在同一个列表中有两个 for 循环,但第二个循环从第一个循环的下一个值开始?

转载 作者:行者123 更新时间:2023-12-02 18:46:35 24 4
gpt4 key购买 nike

我正在尝试编写一个代码,其中我有一个向量列表,并且我必须找到每个向量与其余向量之间的角度。(我正在处理 mediapipe 的手部地标)。到目前为止我的代码是这个:

vectors = [thumb_cmc_vec, thumb_mcp_vec, thumb_ip_vec, thumb_tip_vec, index_mcp_vec, index_pip_vec,
index_dip_vec, index_tip_vec, middle_mcp_vec, middle_pip_vec, middle_dip_vec, middle_tip_vec,
ring_mcp_vec, ring_pip_vec, ring_dip_vec, ring_tip_vec, pinky_mcp_vec, pinky_pip_vec,
pinky_dip_vec, pinky_tip_vec]

for vector in vectors:
next_vector = vector + 1
print(vector)
for next_vector in vectors:
print(next_vector)
M = (np.linalg.norm(vector) * np.linalg.norm(next_vector))
ES = np.dot(vector, next_vector)
th = math.acos(ES / M)
list.append(th)
print(list)

其中 M = 当前向量集范数的乘积,ES =向量和 th 的标量积 = 向量的角度。我的问题是变量 next_vector 总是从列表的第一个向量开始 for 循环,即使我希望它从前一个循环的下一个向量开始以避免重复结果。此外,当两个循环都在第 3 个向量 (thumb_ip_vec) 上时,我收到此错误th = math.acos(ES/M)ValueError:数学域错误。有什么办法可以解决这个问题吗?谢谢!

最佳答案

我认为您可以遍历列表索引(使用 range(len(vectors) - 1))并通过它们的索引访问元素,而不是遍历每个元素

for i in range(len(vectors) - 1):
# Iterate from 0 to len(vectors) -1
vector = vectors[i]
for j in range(i + 1, len(vectors)):
# Iterate from index i + 1 to len(vectors)
next_vector = vectors[j]
M = (np.linalg.norm(vector) * np.linalg.norm(next_vector))
ES = np.dot(vector, next_vector)
th = math.acos(ES / M)
list.append(th)
print(list)

关于python - 我如何在同一个列表中有两个 for 循环,但第二个循环从第一个循环的下一个值开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67358269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com