如何通过循环将矩阵的第一个元素附加到列表上?

时间:2019-02-15 21:26:11

标签: python arrays python-3.x matrix list-comprehension

我有两个循环,分别针对不同的x和y坐标运行,并且针对每个不同的(x,y)坐标,使用矩阵方法求解力1和力2的线性方程,即,如果Ax求A的逆=C。对于每个循环,它给出一个矩阵形式的答案,其中第一个元素是力1,第二个元素是力2。这是我的代码:

import numpy as np
from scipy import linalg
def Force():
    Force1 = np.zeros((160,90))
    Force2 = np.zeros((160,90))
    for x in np.arange(0,16.1,0.1):
        for y in np.arange(1,9.1,0.1):
            l1 = np.hypot(x,y)
            l2 = np.hypot(15-x,y)
            A = np.array([[(x/l1),((x-15)/l2)],[(y/l1),(y/l2)]])
            c = np.array([[0],[70*9.81]])

            F = linalg.solve(A,c)
            Force1[x,y] = F[0]
            Force2[x,y] = F[1]
            print("Force 1 = {} \nForce 2 = {}\n".format(F[0], F[1]))

因此在每个点(x,y)上求解矩阵[[Force 1],[Force 2]]。现在,我想将所有Force1(s)附加到Force1 [x,y]的列表中,并类似地添加到Forces2(s),以便可以这样做

plt.imshow[Force1]
plt.imshow[Force2]

绘制2个热图。我将如何去做?

1 个答案:

答案 0 :(得分:0)

这解决了您的问题-您试图将其分配给float类型的Force1Force2中的索引。我已经将for循环更改为用户enumerate,并调整了分配,以便它分配了F[0][0]F[1][0]

import numpy as np
from scipy import linalg
def Force():
    Force1 = np.zeros((160,90))
    Force2 = np.zeros((160,90))
    for i, x in enumerate(np.arange(0,16,0.1)):
        for j, y in enumerate(np.arange(1,9,0.1)):
            l1 = np.hypot(x,y)
            l2 = np.hypot(15-x,y)
            A = np.array([[(x/l1),((x-15)/l2)],[(y/l1),(y/l2)]])
            c = np.array([[0],[70*9.81]])

            F = linalg.solve(A,c)
            Force1[i, j] = F[0][0]
            Force2[i, j] = F[1][0]
#            print("Force 1 = {} \nForce 2 = {}\n".format(F[0], F[1]))
    plt.imshow(Force1)
    plt.show()
    plt.imshow(Force2)
    plt.show()

Force()

生成的图是:

Force 1

Force 2