Python矩阵乘法3D阵列

时间:2018-07-26 20:40:36

标签: python matrix

我试图用数字方法求解PDE,在此过程中,我遇到了类似于3维空间的三重嵌套问题。此构造嵌套在另一个时间循环中,因此您可以想象,对于足够大的节点数,计算将永远花费。代码块看起来像这样

    for jy in range(0,cy-1):
        for jx in range(0,cx-1):
            for jz in range(0,cz-1):
                T[n+1,jx,jy,jz] = T[n,jx,jy,jz] + s*(T[n,jx-1,jy,jz] - 2*T[n,jx,jy,jz] + T[n,jx+1,jy,jz]) + s*(T[n,jx,jy-1,jz] - 2*T[n,jx,jy,jz] + T[n,jx,jy+1,jz]) + s*(T[n,jx,jy,jz-1] - 2*T[n,jx,jy,jz] + T[n,jx,jy,jz+1]) 

乍一看可能令人生畏,但相当容易。我有一个3维矩阵,代表固体散装材料,其中每个点代表当前温度。迭代计算得出的每个点的下一个温度是考虑到该点旁边的每个点的,因此总共需要6个温度。对于一维实体,解决方案只是简单的矩阵乘法。像一维情况一样,是否有机会在简单的矩阵解决方案中表示上述3回路系统?

最诚挚的问候!

2 个答案:

答案 0 :(得分:0)

使用numpy,您可以轻松地进行这类矩阵运算,

例如3x3矩阵

将numpy导入为np

T = np.random.random((3,3,3))

T = T * T-2 * T ...等

答案 1 :(得分:0)

首先,您需要更加谨慎地使用术语。 “矩阵”是二维的数字数组。因此,您实际上是在谈论数组。 Numpy或更好的Scipy具有称为ndarray的数据类型。您需要非常小心地操作它们,因为尽管有时有时将它们用于表示矩阵,但仍有一些操作可以在二维数组上执行,这些操作在数学上对矩阵不合法。

我强烈建议您使用@而不是*来执行一维或二维矩阵的乘法,并确保添加代码以检查您所做的运算在数学上是合法的。作为一个简单的示例,Python允许您将1 x n或n x 1向量添加到n x n矩阵,即使这在数学上并不正确。如上所述,之所以允许它,是因为Python中没有真正的矩阵类型。

很有可能您可以重新构造问题以使用3-D阵列,并通过实验找到您要执行的特定操作。请记住,线性代数的规则仅在Python中随便应用。