You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用嵌套for循环实现行变体标量版矩阵向量乘法函数matvec_row_variant_scalar

matvec_row_variant_scalar 函数问题排查与实现

现有代码存在的问题

  • 内层循环边界错误:内层j的遍历范围错误使用了A的行数A.shape[0],矩阵-向量乘法要求A的列数等于x的长度,应该遍历A的列数A.shape[1],非方阵场景下会直接触发索引越界。
  • 非法修改输入矩阵:循环内直接对A[i,j]赋值,会修改外部传入的原始矩阵,产生不必要的副作用,且该操作完全冗余。
  • 结果赋值逻辑错误:矩阵-向量乘法的结果y[i]是A的第i行与x的点积,现有代码在j循环中错误修改y[j],还调用了A[i,:].sum()数组方法,不符合「仅使用标量访问」的要求,逻辑完全不匹配计算规则。
  • 输入维度兼容问题:传入的测试x是二维列向量(shape为(n,1)),直接索引x[j]会得到一维数组而非标量,且函数没有兼容处理一维输入的逻辑。
  • 测试用例语法错误:测试矩阵A中写了[0,,0],多了多余逗号,不符合numpy数组语法规则。
  • 多余的强制类型转换:代码中int(x[j])会强制将x的元素转为整型,丢失浮点型输入的精度,无存在必要。

修正后符合要求的代码

import numpy as np

def matvec_row_variant_scalar(A, x):
    # 初始化结果向量,长度等于A的行数
    y = np.zeros(A.shape[0])
    # 外层循环遍历A的每一行
    for i in range(A.shape[0]):
        # 内层循环遍历A的每一列,通过标量运算计算点积
        for j in range(A.shape[1]):
            # 直接累加标量乘积到y[i],不修改原矩阵
            y[i] += A[i][j] * x[j]
    return y

# 修正后的测试用例
A = np.array([[1,0,0],[0,1,0],[0,0,1]])
x = np.array([1, 2, 3])
print(matvec_row_variant_scalar(A,x))

代码说明

  • 严格使用两层嵌套循环,所有运算都通过A[i][j]和x[j]的标量访问完成,没有调用任何数组级别的运算方法,完全符合要求。
  • 不会修改输入的A和x,无额外副作用。
  • 兼容非方阵的输入场景,只要A的列数等于x的长度即可正常计算。
  • 测试用例输出结果为[1. 2. 3.],和单位矩阵乘向量的预期结果一致。

内容的提问来源于stack exchange,提问作者Chirag Purohit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:30:01