numpy 用于解方程的Python数组

klh5stk1  于 2022-11-24  发布在  Python
关注(0)|答案(1)|浏览(169)

我正在编写一个简单的热方程求解器,以适应python编程语言。我的代码如下:

  1. for i in range(1,m):
  2. c=gamma*p*(q[i-1]+q[i])
  3. rhs=np.matmul(B,np.transpose(u[i-1,:]))+np.transpose(c)
  4. sol=np.linalg.solve(A,rhs[0])
  5. u[i,:]=np.transpose(sol)
  6. print('Simulation Complete!')

我遇到的问题是如何理解矩阵的结构。我常用的编程语言Matlab,处理数组的方式非常严格,就像数学一样,你必须小心你的维数。看起来python的情况并非如此。在我代码的最后几行,我将行向量和列向量视为不同的,但这太麻烦了。有没有办法让这些东西更有效率
现在,我似乎把所有的东西都当作一个数组,为了从线性代数解算器中正确地得到一个向量,我必须选择第一个元素。我可以对我的输入稍微宽松一点吗?或者我可以对我定义矩阵的方式更严格一点吗?所以,如果它们是行向量或列向量,请保持标签。

cbeh67ev

cbeh67ev1#

在numpy中,您可以定义列向量、行向量和2D矩阵。
例如:

  1. >>> np.ones((1,4))
  2. array([[1., 1., 1., 1.]])
  3. >>> np.ones((4,1))
  4. array([[1.],
  5. [1.],
  6. [1.],
  7. [1.]])
  8. >>> np.ones((4,4))
  9. array([[1., 1., 1., 1.],
  10. [1., 1., 1., 1.],
  11. [1., 1., 1., 1.],
  12. [1., 1., 1., 1.]])

您可以:

  1. >>> np.dot(2*np.ones((1,4)), np.ones((4,4)))
  2. array([[8., 8., 8., 8.]])

你也可以做

  1. >>> np.dot(np.ones((4,4)), 2*np.ones((4,1)))
  2. array([[8.],
  3. [8.],
  4. [8.],
  5. [8.]])

但如果你试图

  1. >>> np.dot(np.ones((4,4)), 2*np.ones((1,4)))
  2. or
  3. >>> np.dot(2*np.ones((4,1)), np.ones((4,4)))
  4. Traceback (most recent call last):
  5. File "<stdin>", line 1, in <module>
  6. File "<__array_function__ internals>", line 5, in dot
  7. ValueError: shapes (4,1) and (4,4) not aligned: 1 (dim 1) != 4 (dim 0)

因此,如您所见,考虑了维度,如果所涉及的向量的维度不匹配,则不允许执行某些操作

展开查看全部

相关问题