stackoverflow的新手,对编程来说还算新。
我有一组32个未知数的32个方程。我想使用np.linalg.solve
来解决这个等式:
表示a1 * x + b1 * y = c1
和a2 * x + b2 * y = C2
(x和y是未知数; a,b和c是来自程序中其他位置的变量),如下所示:
eq1 = np.array([[a1,a2],[b1,b2]])
eq2 = np.array([c1,c2])
solution = np.linalg.solve(eq1,eq2)
在我的情况下,而不是a和b,我有一个32x32矩阵,以q(i,j)的形式保存所有这些变量,而不是c以p(i)形式的32x1矩阵。这看起来像这样:
eq1 = np.array([[q(0,0),...,q(32,0)],...,[q(32,0),...,q(32,32)]
eq2 = np.array([p(0),...,p(32)]
solution = np.linalg.solve(eq1,eq2)
变得很长。我正在寻找一种方法来避免手工输入所有这些。据我所知,在这种情况下字典无济于事,我仍然需要键入所有键。我已经阅读了exec
(这似乎会引起很多人的过敏)和setattr
这样的事情,但是在我看来这些仍然无法解决...我尝试了一个双循环来将q(i,j)写成字符串并将所有这些字符串连接成一个长字符串,但我不知道如何将它返回到我需要的原始变量中。
还有其他办法吗?如果这简化了解决方案,我不会坚持np.alg.solve
。提前谢谢!
答案 0 :(得分:2)
eq1 = np.array([[q(i, j) for i in range(33)] for j in range(33)])
eq2 = np.array([p(i) for i in range(33)])
solution = np.linalg.solve(eq1,eq2)
答案 1 :(得分:1)
您可能不需要字面整数作为索引;变量可以做。
foo([x[i] for i in range(10)])
相当于
foo([x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9]])
尝试根据您的需要调整想法。
请注意,如果需要,您可以重复使用一长串变量:
piece = [x[i] for x in range(10, 20)]
baz = foo(piece) * bar(piece)