使用嵌套for循环实现方阵与行数组相乘并解决numpy报错问题
报错原因
- 你传入的
row_array是一维numpy数组,x[0]取到的是单个numpy.int64类型的数值,没有len()属性,调用len(x[0])直接触发报错。 - 原代码写的是三层循环的矩阵乘矩阵逻辑,不符合矩阵乘向量的计算要求,且输出数组维度设置错误,矩阵乘向量的结果是一维向量,不需要创建和方阵同维度的二维数组。
修复后代码(满足两层嵌套for循环要求)
import numpy as np def matvec_row_variant_scalar(A,x): n = len(A) # 矩阵乘向量输出为长度n的一维数组 product_array = np.zeros(n, dtype=int) # 第一层遍历矩阵的行 for i in range(n): current_sum = 0 # 第二层遍历行元素和向量的对应位置,累加计算点积 for k in range(n): current_sum += A[i][k] * x[k] product_array[i] = current_sum return product_array # 测试数组 square_array = np.array([[1,2],[3,4]]) row_array = np.array([2,2]) print(matvec_row_variant_scalar(square_array,row_array))
运行输出:[6 14]
核心修改点
- 调整输出数组维度:将二维方阵输出改为长度和方阵阶数一致的一维数组,符合矩阵向量乘法的结果形态
- 简化为两层循环:删除多余的第三层循环,直接通过两层循环完成矩阵行与向量的点积计算,匹配需求
- 兼容一维向量输入:不再尝试获取
x[0]的长度,直接用向量本身的长度作为内层循环遍历上限,彻底解决len()调用报错问题
内容的提问来源于stack exchange,提问作者Isaac
相关产品推荐
相关产品推荐

