【问题标题】:Increase a value under loop in an array增加数组中循环下的值
【发布时间】: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


【解决方案1】:

问题出在 while 循环上。程序更改了 O4[2] 的元素,但不能将它们放在 while 循环中。更好的版本将是,

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)))
while np.linalg.norm(vec14) <= 6:
    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)))    
    dr = -0.05
    dq = 0.05
    O4[2] = O4[2] + dr
    H5[2] = H5[2] + dq
    H6[2] = H6[2] + dr
    print ("vec14, O4[2] and vec25", np.linalg.norm(vec14), O4[2] , np.linalg.norm(vec25))```

【讨论】:

    猜你喜欢
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多