如何避免键入一系列变量

时间:2017-03-09 17:40:34

标签: python arrays python-3.x

stackoverflow的新手,对编程来说还算新。

我有一组32个未知数的32个方程。我想使用np.linalg.solve来解决这个等式:

表示a1 * x + b1 * y = c1a2 * 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。提前谢谢!

2 个答案:

答案 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)