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

NumPy实现逐行点积与整数序列标量乘向量的方法

逐行对应点积实现

你原循环思路可行,但存在两处错误:

  • np.size(a)返回的是数组总元素个数,不是行数,应当用a.shape[0]获取行数量
  • 使用c.append前需要先初始化c = []

实际使用时不推荐手写循环,NumPy的向量化运算效率远高于Python层循环,以下两种写法都可以直接得到你预期的[0, 2]结果:

import numpy as np
a = np.array([[0,0,0],[0,0,1]])
b = np.array([[1,2,3],[1,3,2]])

# 写法1:可读性最高,逐元素相乘后按行求和
c1 = (a * b).sum(axis=1)

# 写法2:einsum实现,大规模数组运算时性能更优
c2 = np.einsum('ij,ij->i', a, b)

注意:避免使用np.diag(a @ b.T)的写法,该方法会先计算所有行组合的点积,再提取对角线结果,存在大量冗余计算,数据量较大时性能很差。

整数序列与向量的标量乘法实现

这个操作可以直接通过NumPy的广播机制实现,只需要把一维整数序列转为列向量(形状为(序列长度, 1)),再和向量做乘法即可自动广播得到你要的二维结果:

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

c = a.reshape(-1, 1) * b
print(c)
# 输出:
# [[0 1 0]
#  [0 2 0]]

如果你不想用NumPy,纯Python列表场景下用列表推导即可实现:

a = [1, 2]
b = [0, 1, 0]
c = [[scalar * elem for elem in b] for scalar in a]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:54:21