Python矩阵查询-必须是更简单的方法
我已经创建了一个小Python程序来将两个2乘2的矩阵相乘,但我想知道它是否可以以任何方式简化(特别是创建新数组) python代码如下所示:Python矩阵查询-必须是更简单的方法,python,arrays,matrix,simplify,Python,Arrays,Matrix,Simplify,我已经创建了一个小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)
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)
任何想法都会被广泛接受 不要手动执行。你正在重新发明轮子,而且已经有非常好的轮子了 Numpy就是答案
import numpy as np
a = np.arange(20).reshape(5,4)
b = (np.arange(20) + 10).reshape(4,5)
np.dot(a,b)
文件:
干杯,不要用手执行。你正在重新发明轮子,而且已经有非常好的轮子了 Numpy就是答案
import numpy as np
a = np.arange(20).reshape(5,4)
b = (np.arange(20) + 10).reshape(4,5)
np.dot(a,b)
文件:
干杯,p除非您只需要使用普通python,否则使用numpy会简单得多。可以使用matrix类,也可以只使用2d数组和点函数。例如:
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]])
除非您只需要使用普通python,否则使用numpy会简单得多。可以使用matrix类,也可以只使用2d数组和点函数。例如:
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]])
你完全可以简化矩阵乘法,使之通用。诀窍是使用
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]
如果不使用列表理解,则需要预先分配列表或在循环之间使用append/extend 您完全可以简化矩阵乘法并使其通用化。诀窍是使用
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]
如果不使用列表理解,则需要预先分配列表或在循环之间使用append/extend 核对