在数组中的一个值之后,以另一种方式开始计算

Posted

技术标签:

【中文标题】在数组中的一个值之后,以另一种方式开始计算【英文标题】:After a value in an array, start to calculate in another way 【发布时间】:2022-01-22 11:44:14 【问题描述】:

我需要计算角度的变化并存储在一个数组中,我有以下问题: 角度通过计算增加其值,当角度值优于90°时,python开始绘制补充值,而不是延续,如下所示:

不受欢迎的方式(并且正在发生): 23.45°、26.7°、……、84.5°、88.33°、85°、82.3°……

理想的方式: 23.45°、26.7°、……、84.5°、88.33°、91.2°、94.7°……

我的代码是:

import math as mt
import numpy as np

l = 85
s = 170
q = 30.07
p = 120

theta = (3.81*np.pi)/180
alfa = np.linspace((104.07*np.pi)/180, (26.19*np.pi)/180, 40)

d = np.sqrt(s**2 + q**2 - 2*s*q*np.cos(alfa))
gama = np.arccos((l**2 + p**2 - s**2 - q**2 + 2*s*q*np.cos(alfa))/(2*l*p))
betalinha = np.arcsin((s / d) * np.sin(alfa))*180/np.pi

print(np.around(betalinha, 2))

输出: [66.59 68.46 70.34 72.22 74.12 76.03 77.95 79.88 81.82 83.77 85.74 87.72 89.7 88.29 86.28 84.25 82.21 80.16 78.09 76.01 73.92 71.81 69.69 67.55 65.4 63.23 61.05 58.86 56.65 54.43 52.2 49.95 47.68 45.41 43.12 40.82 38.5 36.18 33.84 31.49]

【问题讨论】:

【参考方案1】:

我不确定根本问题是什么,但我相信您可以通过以下方式纠正它

    计算值的差异(小于先前值的值产生负值) 将 diff 乘以 2 和 cumsum 添加到betalinha
# Compute the diff (adding a dummy value to the beginning since diff returns an array of N - 1 length)
diff = np.insert(np.diff(betalinha), 0, 1)

# Reset positive values to 0
diff[diff > 0] = 0

# Fix decreasing values
betalinha -= diff.cumsum() * 2

输出:

>>> betalinha
array([ 66.59,  68.46,  70.34,  72.22,  74.12,  76.03,        77.95,  79.88,
        81.82,  83.77,  85.74,  87.72,  89.7 ,  91.11, <---   93.12,  95.15,
        97.19,  99.24, 101.31, 103.39, 105.48, 107.59,       109.71, 111.85,
       114.  , 116.17, 118.35, 120.54, 122.75, 124.97,       127.2 , 129.45,
       131.72, 133.99, 136.28, 138.58, 140.9 , 143.22,       145.56, 147.91])

【讨论】:

出色的方式@richardec,非常感谢!我对这些值的问题是我需要将它们与其他角度相加并计算 sin、cos 等,而在补充方面,我在最终结果中遇到了问题。简化并专注于我的问题不在问题中。 这不能正常工作。例如,如果betalinha = np.array([60., 80., 70.]) 它将给出[60., 80., 90.] 而它应该给出[60., 80, 110.] 对不起@bb1,你能解释一下为什么错了吗?根据问题中的“理想方式”,它似乎正确地生成了 91.66,它四舍五入到 91.2 ......还是我误解了? @Danilo 您所说的“简化和关注我的问题不在问题中”是什么意思? 90后价值在下降,而您希望它们继续上升,这不是您的问题吗? 我赞成您的回答 - 看起来不错!【参考方案2】:
diff = np.insert(np.diff(betalinha), 0, 1)

while j < len(diff):
    if diff[j] < 0:
        betalinha[j] -= np.pi
        betalinha[j] *= -1
    j+=1

输出: 数组([1.16218675, 1.19480394, 1.22758774, 1.26054302, 1.29367464, 1.32698746、1.36048627、1.39417585、1.42806092、1.46214611、 1.49643599、1.53093502、1.56564752、1.60057772、1.63572963、 1.67110713、1.70671387、1.74255327、1.7786285、1.81494244、 1.85149766、1.88829639、1.92534047、1.96263135、2.00017004、 2.03795707、2.07599248、2.11427574、2.15280579、2.19158094、 2.23059888、2.26985664、2.30935057、2.34907629、2.38902871、 2.42920199, 2.46958953, 2.51018397, 2.55097717, 2.59196023])

【讨论】:

以上是关于在数组中的一个值之后,以另一种方式开始计算的主要内容,如果未能解决你的问题,请参考以下文章

尝试以另一种方法访问临时数组

以另一种方式在 VIM 窗口之间导航

为啥我能够有条件地以一种方式调用钩子,而不能以另一种方式调用?

以另一种方式提高动态 SQL 查询性能或过滤记录

如何以另一种形式使用标签中的 user_id

NLP悦读 | 所有的失去,都会以另一种方式归来