矩阵相乘的python函数

不用numpy的方法来计算矩阵相乘

img

innerproduct是计算两个向量的内积

函数AxIP应该使用内积来计算结果的向量(称之为b)
你应该写一个单一的循环,只用A[i,:]来引用A的行。b的每个元素 的每个元素都应该用你的innerProduct()函数来构建。

函数AxVS应将结果向量b作为向量和来计算
在AxVS中,你应该写一个单一的循环,只用A[:,i]来引用列A。使用这些列来 用一个矢量和来计算b

import numpy as np


def innerProduct(a, b):
    return sum(i * j for i, j in zip(a, b))


def AxIP(A, x):
    col_result = []
    for i in range(A.shape[0]):
        col_result.append([innerProduct(A[i, :], x)])
    return np.array(col_result)


def AxVS(A, B):
    result = []
    for i in range(B.shape[1]):
        result.append(AxIP(A, B[:, i]))
    return np.hstack(result)


A = np.array([[1, 2], [3, 4]])
B = np.array([[3, 6], [1, 1]])
print(AxVS(A, B))

A = np.array([[1, 2]])
B = np.array([[3], [6]])
print(AxVS(A, B))

A = np.array([[1], [2]])
B = np.array([[3, 6]])
print(AxVS(A, B))

测试了(n*n)*(n*n), (n*1)*(1*n), (1*n)*(n*1)

img

innerproduct应该是这样写的,那么下面两个函数怎么写呢