【发布时间】:2021-06-08 08:26:48
【问题描述】:
我有这个数组,其中我使用 numpy 定义了几个向量和角度。
我想将 O4、H5 和 H6 的第三个数组元素更改为 +- 0.05 单位,直到 np.linalg.norm(vec14) 达到 6。因为三个元素中有两个是负数,所以我使用了两个博士和 dq。
所以,在改变第三个数组元素时,向量范数和余弦角应该相应地改变。
在运行代码时,我只得到正在不停打印的初始值。我必须强行阻止它。 有什么帮助吗?
另外一个问题:将数据写入 csv 文件有什么帮助吗?我试过了,但输出显示“TypeError:格式字符串的参数不足”
import numpy as np
O1 = np.array([-1.50038497e+00, -4.38065793e-02, 4.81288047e-03])
H2 = np.array([-1.82038214e+00, 8.59029461e-01, -1.66180895e-02])
H3 = np.array([-5.40667862e-01, 5.43751807e-02, 8.96204700e-05])
O4 = np.array([ 1.42268215e+00, 3.89704707e-02, -4.50889953e-03])
H5 = np.array([ 1.79930376e+00, -3.99409589e-01, 7.61615480e-01])
H6 = np.array([ 1.79494646e+00, -4.37242499e-01, -7.49911410e-01])
vec14 = O1-O4
vec12 = O1-H2
vec25 = H2-H5
cos412 = (np.dot(vec12,vec14) / (np.linalg.norm(vec12) * np.linalg.norm(vec14)))
cos125 = (np.dot(vec12,vec25) / (np.linalg.norm(vec12) * np.linalg.norm(vec25)))
#g = open ("test_array_manipulate.csv", "w")
while np.linalg.norm(vec14) <= 6:
print ("vec14, cos412 and cos125", np.linalg.norm(vec14), cos412, cos125)
#g.write ("%2.7f, %2.7f, %2.7f \n" % (np.linalg.norm(vec14)), cos412, cos125)
dr = -0.05
dq = 0.05
O4[2] = O4[2] + dr
H5[2] = H5[2] + dq
H6[2] = H6[2] + dr```
【问题讨论】:
-
您的实际问题是什么?请一次问一个。
-
vec14的值在循环中永远不会改变。当然,它会永远持续下去。您需要将vec14 = O1-O4放入循环中。 -
很抱歉提出多个问题。同样,我的意思是我将保持最大 np.linalg.norm(vec14) = 6 表示点 1 和 4 之间的最大距离。我想是否可以在更改第 4 点的坐标时更改此值。我所做的完全不现实,还是可以执行?感谢您的建议。
-
差异计算一个新数组。您需要继续这样做才能改变循环条件。
标签: python arrays numpy while-loop