【问题标题】:Python matrix query - must be simpler wayPython矩阵查询 - 必须更简单的方法
【发布时间】:2014-09-30 19:56:30
【问题描述】:

我创建了一个小型 Python 程序来将两个 2 乘以 2 矩阵相乘,但我想知道它是否可以以任何方式简化(特别是创建新数组)

python代码如下:

matA=[0]*2
matB=[0]*2
matC=[0]*2
matC[0]=[0]*2
matC[1]=[0]*2
# creating new arrays for multiplying two 2 by 2 matrices
# must be a more simple way


def multiply2by2matrices(a,b):

    matC[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]
    matC[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1]
    matC[1][0]=a[1][0]*b[0][0]+a[1][1]*b[1][0]
    matC[1][1]=a[1][0]*b[0][1]+a[1][1]*b[1][1]

    print ((matC[0][0]),(matC[0][1]))
    print ((matC[1][0]),(matC[1][1]))

matA[0]=[4,3]
matA[1]=[2,12]

matB[0]=[5,-2]
matB[1]=[6,3]

multiply2by2matrices(matA, matB)

任何想法都会受到极大的欢迎。

【问题讨论】:

标签: python arrays matrix simplify


【解决方案1】:

不要手动实现。您正在重新发明轮子,并且已经有了非常好的轮子。

Numpy 就是答案。

import numpy as np
a = np.arange(20).reshape(5,4)
b = (np.arange(20) + 10).reshape(4,5)
np.dot(a,b)

文档:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html

干杯,P

【讨论】:

    【解决方案2】:

    除非您只需要使用 vanilla python,否则使用 numpy 会简单得多。您可以使用矩阵类或仅使用二维数组和点函数。例如:

    import numpy as np
    a=np.array([[1,1],[2,2]])
    b=np.array([[3,3],[3,3]])
    c=np.dot(a,b)
    

    产生:

    array([[ 6,  6],
           [12, 12]])
    

    【讨论】:

      【解决方案3】:

      您绝对可以简化矩阵乘法并使其通用。诀窍是使用zip。当然还有其他方法,但我认为 zip 可能会产生一些更简洁的代码。 我没有测试以下内容,但我认为我的线性代数对我有用。

      def matmult(a,b):
          zipb = zip(*b)
          return [[sum(ax*bx for ax,bx in zip(rowa, colb)) for colb in zipb] for rowa in a]
      

      如果您不使用列表推导,您将需要预先分配一个列表或在 for 循环之间使用追加/扩展。

      【讨论】:

        猜你喜欢
        • 2019-08-30
        • 1970-01-01
        • 1970-01-01
        • 2014-10-14
        • 1970-01-01
        • 2014-06-02
        • 2014-09-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多