我有一个线性问题需要解决一定的次数:Ax = B,其中A是一个维度为n的方阵,B是一个维度为n的向量。我需要找到x:
import numpy as np
A = np.random.rand(2,2)
B = np.random.rand(2)
x = np.linalg.solve(A,B)
这很基础。问题在于我想多次解决这个问题。当前的实现方式如下:
import numpy as np
k = 50 # the number of systems to solve
A_list = np.random.rand(k,2,2)
B_list = np.random.rand(k,2)
x = np.array([np.linalg.solve(A,B) for A, B in zip(A_list, B_list)])
但是它非常慢。在这个网站的人们的帮助下,我使用np.newaxis
进行智能广播,消除了我的代码中的一个巨大瓶颈。我想知道是否有类似的技巧可以用于这种类型的函数(np.linalg.solve
,np.linalg.det
等)。
我使用np.vectorize
进行测试失败了。
编辑:
输出
>>> import numpy as np
>>> k = 50 # the number of systems to solve
>>> A_list = np.random.rand(k,2,2)
>>> B_list = np.random.rand(k,2)
>>> x = np.array([np.linalg.solve(A,B) for A, B in zip(A_list, B_list)])
---------------------------------------------------------------------------
LinAlgError Traceback (most recent call last)
<ipython-input-53-fecc7a7edaf9> in <module>()
----> 1 solution = np.linalg.solve(A_list,B_list)
/usr/lib/python3.3/site-packages/numpy/linalg/linalg.py in solve(a, b)
309 if one_eq:
310 b = b[:, newaxis]
--> 311 _assertRank2(a, b)
312 _assertSquareness(a)
313 n_eq = a.shape[0]
/usr/lib/python3.3/site-packages/numpy/linalg/linalg.py in _assertRank2(*arrays)
153 if len(a.shape) != 2:
154 raise LinAlgError('%d-dimensional array given. Array must be '
--> 155 'two-dimensional' % len(a.shape))
156
157 def _assertSquareness(*arrays):
LinAlgError: 3-dimensional array given. Array must be two-dimensional