【问题标题】:How to process matrix multiplication in python?如何在python中处理矩阵乘法?
【发布时间】:2017-09-19 13:48:15
【问题描述】:

这个程序会一一获取基本信息(输入行、列、行、列) 然后是数字(第一个矩阵中的数字按列排序,第二个,按行排序)

所以,如果第一个这样的矩阵将被列为A.[1,2,3,4]

1 2

3 4

第二个是B.[5,7,6,8]

5 6 

7 8

我将第一个矩阵的行数设为 num1,列数设为 num2

第二个矩阵的行为 num3(num3 应等于要计算的 num2)列为 num4

不管矩阵有多大,它的结果都是这样的

A[0]*B[0]+A[1]*B[1]     A[0]*B[2]+A[1]*B[3]

A[2]*B[0]+A[3]*B[1]     A[2]*B[2]+A[3]*B[3]

所以我必须在我陷入困境的地方编写代码:

while j in B(j) increases until j reaches `(num3*num4-1)`,

A(i) 中的 i 应该增加并重复 interval(0, num2-1)

所以结果将是res += int(A[i]) * int(B[j])

当j到达(num3*num4-1)时,它应该回到0并重复这些过程直到我到达(num1*num2-1)

if num2 == num3:
res=0
for k in range(0, num2):
    for i in range(k, ):
for l in range(0, (num4)-1):    
    for j in range(l*num2, (l+1)*(num2)-1):
        res += int(a[i])*int(b[j])

        c.append(res)

    k+=1

【问题讨论】:

  • 您希望将输入保留为一维数组吗?

标签: python


【解决方案1】:

使用 NumPy 包可以轻松完成矩阵乘法。

a = [[1, 0], [0, 1]]
b = [[4, 1], [2, 2]]
np.matmul(a, b)

乘法的结果将是一个数组。

array([[4, 1],[2, 2]])

如果您想使用旧的 for 循环方式,则遍历列和行进行乘法然后相加将导致矩阵乘法,如下面的代码所示。

# Program to multiply two matrices using nested loops

# 2 * 2 matrix
X = [[1, 2],
    [3, 4]]
# 2 * 2 matrix
Y = [[5,6],
    [7,8]]
# result is 2 * 2
result = [[0,0,],
         [0,0,]]

# iterate through rows of X
for i in range(len(X)):
   # iterate through columns of Y
   for j in range(len(Y[0])):
       # iterate through rows of Y
       for k in range(len(Y)):
           result[i][j] += X[i][k] * Y[k][j]

for r in result:
   print(r)

结果将是

[19, 22]
[43, 50]

【讨论】:

  • 非常感谢您告诉我简单的方法。我稍后会尝试 NumPy!
  • 我猜你需要用普通的 Python 做这个乘法吗?
【解决方案2】:

你可以试试下面的

import numpy


def matrix_multiplier(auxA, auxB):
    print (numpy.matmul(auxA,auxB))


#[1, 2]
#[3, 4]
auxA = numpy.array([[A[0], A[1]],[A[2], A[3]]])
#[5, 6]
#[7, 8]
auxB = numpy.array([B[0], B[1]],[B[2], B[3]])

matrix_multiplier(auxA,auxB)

结果如下:

[[19 22]
 [43 50]]

【讨论】:

  • 是的,请!作为初学者,我真的很想从无到有!谢谢!
【解决方案3】:

这是一种将输入保持在您最初预期的平面数组结构中的实现。不仅要检查num2 == num3,还要检查len(a) % num2 == 0 和len(b) % num3 == 0,这可能是个好主意

c = []
for k in range(0, len (a)/num2):
    for i in range(0, len (b)/num3):
            res = 0
            for n in range(0,num2):
                   j = num3*i + n
                   l = num2*k + n
                   res += int(a[l]*b[j])
                   if n == num2-1:
                       c.append(res)

【讨论】:

  • 非常感谢!你的代码很清晰,很容易理解。
  • 没问题!如果您觉得您的问题确实得到了回答,请不要忘记在答案中标记:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
相关资源
最近更新 更多