【发布时间】:2021-09-27 16:25:55
【问题描述】:
我有一个方程组,我需要求解大量变量。代码比下面复杂,但问题如下:
我有一个迭代器:
iterator= np.arange(2000) # array!
以及依赖于该迭代器函数的数组:
A_11 = function_A11(iterator)
A_12 = function_A12(iterator)
A_21 = function_A21(iterator)
A_22 = function_A22(iterator)
B_1 = function_B1(iterator)
B_2 = function_B2(iterator)
X = np.zeros(2, 2000)
for i, (A11, A12, A21, A22, B1, B2) in enumerate(zip(A_11, A_12, A_21, A_22, B_1, B_2):
A = np.array([[A11, A12],[A21,A22]])
B = np.array([B1, B2])
X[:,i] = np.linalg.solve(A,B)
该方法有效,但计算量很大,我觉得我应该能够优化它,例如通过使用 3D 数组。有人有什么建议吗?
谢谢!
提姆
【问题讨论】:
-
如果您必须将该函数应用于数组中的每个条目,它的速度不能超过 O(N),其中 N = # 个元素。如果你有多个核心,你可以并行化,但是通过上下文切换,单个核心不能做得更好。
-
你没有迭代器,你有一个数组。
-
根据文档,
A可以是(…, M, M)和B(…, M,)。在您的情况下,这意味着制作 (2000,2,2) 和 (2000,2) 数组
标签: python numpy loops linear-algebra