gpt4 book ai didi

python - 在 python 中计算复杂的数学方程式

转载 作者:太空宇宙 更新时间:2023-11-04 07:04:15 25 4
gpt4 key购买 nike

是否有任何库或技术可以简化计算方程式?

举下面两个例子:

  • F = B * { [ a * b * sumOf (A/B ''' for all i ''' ) ]/[ sumOf(c * d * j) ] }

    哪里:

    F = 从 i 到 j 的成本

    B, a, b, c, d, j 都是格式为 [ [zone_i, zone_j, cost_of_i_to_j], [..]] 的向量

    这应该产生一个向量 F [ [1,2, F_1_2], ..., [i,j, F_i_j] ]

  • T_ij = [ P_i * A_i * F_i_j]/[ SumOf [ Aj * F_i_j ]//j = 1 到 j = n ]

    哪里:

    n是区域数

    T = 向量 [ [1, 2, A_1_2, P_1_2], ..., [i, j, A_i_j, P_i_j] ]

    F = 向量 [1, 2, F_1_2], ..., [i, j, F_i_j]

    因此 P_i 将是所有 j 的所有 P_i_j 的总和,而 Aj 将是所有 i 的所有 P_j 的总和

我不确定我在寻找什么,但也许是这些方程式的解析器或处理向量之间的多次乘法和乘积的方法?

为了计算一些因素,比如A_j,我用的是这个

from collections import defaultdict

A_j_dict = defaultdict(float)
for A_item in TG: A_j_dict[A_item[1]] += A_item[3]

虽然这很好用,但我真的觉得这是一种蛮力/黑客方法,在我们想要添加更多变量或参数的情况下无法维护。您有推荐的数学方程解析器吗?

旁注:这些方程用于模拟旅行。目前我使用 excel 来解决很多这样的方程式;我发现这个过程令人生畏。我宁愿转向 python,它直接从我们的数据库 (postgres) 中提取数据并将结果输出到数据库中。一切都想通了。我只是在努力评估方程本身。

谢谢:)

最佳答案

要对两个具有相同维度的 NumPy 数组进行元素相乘,只需“A * B”。

In [1]: a = arange(50)

In [2]: b = ones(50) * 2

In [3]: a
Out[3]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49])

In [4]: b
Out[4]:
array([ 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.,
2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.,
2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.,
2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.])

In [5]: a * b
Out[5]:
array([ 0., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20.,
22., 24., 26., 28., 30., 32., 34., 36., 38., 40., 42.,
44., 46., 48., 50., 52., 54., 56., 58., 60., 62., 64.,
66., 68., 70., 72., 74., 76., 78., 80., 82., 84., 86.,
88., 90., 92., 94., 96., 98.])

In [6]: (a * b).sum()
Out[6]: 2450.0

如果你可以用矩阵乘法来写东西,你可以使用dot():

In [7]: A = arange(25).reshape((5,5))

In [8]: X = arange(5)

In [9]: A
Out[9]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])

In [12]: dot(A, X) # Sum_j A[i,j] * X[j] for all i
Out[12]: array([ 30, 80, 130, 180, 230])

这应该让你开始。

关于python - 在 python 中计算复杂的数学方程式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2912485/

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