[Deep-ML]Matrix-Vector Dot Product(矩阵-矢量点积)

Matrix-Vector Dot Product(矩阵-矢量点积)

题目链接

Matrix-Vector Dot Product(矩阵-矢量点积)https://www.deep-ml.com/problems/1

题目描述:

难度

easy(简单)

分类

Linear Algebra(线性代数)。

题目

编写一个 Python 函数,该函数计算矩阵和向量的点积。如果操作有效,该函数应返回一个表示结果向量的列表;如果矩阵和向量的维度不兼容,则返回 -1。只有当矩阵中的列数等于向量的长度时,矩阵(一个列表的列表)才能与向量(一个列表)进行点积运算。例如,一个 n x m 的矩阵需要一个长度为 m 的向量。

示例

解释

矩阵向量点积。

考虑一个矩阵 A 和一个向量 v:

矩阵 A(n×m):

向量v(长度为 m):

点积𝐴⋅𝑣产生一个长度为𝑛的新向量:

关键要求:矩阵中的列数(m)必须等于向量的长度(m)。如果不是,该操作是未定义的,并且函数应返回 -1。

题目解析:

题解如下:

def matrix_dot_vector(a:list[list[int|float]],b:list[int|float])-> list[int|float]:
	if len(a[0]) != len(b):
		return -1
	vals = []
	for i in a:
		hold = 0
		for j in range(len(i)):
			hold += (i[j] * b[j])
		vals.append(hold)
	return vals

代码解释:

1. 函数定义与参数:

def matrix_dot_vector(a:list[list[int|float]], b:list[int|float])-> list[int|float]:
  • 定义函数 matrix_dot_vector,接收两个参数:

    • a:矩阵,形式为列表的列表(list[list[int|float]]),例如 [[1, 2], [2, 4]]

    • b:向量,形式为列表(list[int|float]),例如 [1, 2]

  • 函数返回值类型为 list[int|float],即结果向量,若维度不匹配则返回 -1

2. 维度检查:

if len(a[0]) != len(b):
    return -1
  • 矩阵的列数由 len(a[0]) 获取(假设矩阵非空,题目隐含输入有效性)。

  • 检查矩阵列数是否等于向量长度。若不相等,直接返回 -1,表示维度不兼容。

3. 计算矩阵 - 向量点积:

vals = []
for i in a:
    hold = 0
    for j in range(len(i)):
        hold += (i[j] * b[j])
    vals.append(hold)
return vals
  • 遍历矩阵的行:外层循环 for i in a 遍历矩阵的每一行。

  • 计算每行的点积

    • 内层循环 for j in range(len(i)) 遍历当前行的元素,同时通过索引 j 匹配向量 b 的对应元素。

    • hold += (i[j] * b[j]) 实现当前行与向量对应位置元素相乘并累加,得到该行的点积结果。

  • 收集结果:将每行的点积结果 hold 存入 vals 列表,最终返回该列表。

注释版本:

def matrix_dot_vector(a: list[list[int | float]], b: list[int | float]) -> list[int | float]:
    # 检查矩阵的列数(通过a[0]的长度获取)是否与向量b的长度相等,这是矩阵和向量能进行点积运算的必要条件
    if len(a[0]) != len(b):
        return -1  # 若维度不兼容(列数≠向量长度),直接返回-1表示无法运算
    
    vals = []  # 初始化列表,用于存储矩阵与向量点积运算后的结果向量
    for row in a:  # 遍历矩阵a的每一行
        current_sum = 0  # 临时变量,累加当前行与向量点积的结果
        for idx in range(len(row)):  # 遍历当前行的每个元素,同时通过索引idx获取向量b对应位置的元素
            current_sum += row[idx] * b[idx]  # 计算当前行元素与向量对应元素的乘积并累加
        vals.append(current_sum)  # 将当前行的点积结果添加到结果列表中
    
    return vals  # 返回最终的点积结果向量

思考总结:

  1. 数学概念应用

    • 掌握矩阵与向量点积的维度匹配规则(矩阵列数 = 向量长度),这是运算合法性的判断依据。

    • 理解点积计算逻辑:矩阵每行与向量对应元素相乘后求和,生成结果向量。

  2. 编程实现逻辑

    • 维度校验:通过 len(a[0]) != len(b) 检查矩阵列数与向量长度,不匹配时直接返回 -1

    • 循环计算:利用双层循环,外层遍历矩阵的行,内层对每行元素与向量对应元素逐项相乘累加,生成结果列表。

  3. 代码能力考察

    • 列表操作(处理嵌套列表矩阵、普通列表向量)、索引访问元素(row[idx] * b[idx])。

    • 条件判断与循环结构的综合运用,实现从维度检查到结果计算的完整流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值