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

如何用Numpy无循环实现不同形状数组相乘得到目标矩阵?

纯Numpy实现方案

你需要的是利用Numpy的广播机制来实现,无需循环。核心思路是调整数组a的形状,让它和b满足广播条件,从而自动完成逐行的乘法运算。

具体实现步骤:

  1. 将一维数组a转换为二维数组(形状为(3, 1)),这样Numpy会自动将其沿第二维度扩展,匹配b的长度。
  2. 直接让调整后的a与b相乘,广播机制会帮你完成每行的a[i] * b运算。

代码示例:

import numpy as np

# 示例数组
a = np.array([1, 2, 3])  # 长度为3的一维数组
b = np.array([4, 5, 6])  # 长度任意的一维数组

# 转换a的形状并计算
result = a.reshape(3, 1) * b
# 或者用np.expand_dims,效果完全相同:
# result = np.expand_dims(a, axis=1) * b

print(result)

输出结果:

[[ 4  5  6]
 [ 8 10 12]
 [12 15 18]]

原理说明:

Numpy广播的核心规则是:

  • 当两个数组维度数不同时,维度少的数组会自动在前面补维度,直到维度数一致。
  • 对于每个维度,如果其中一个数组的该维度长度为1,就会沿着这个维度复制元素,匹配另一个数组的长度。

这里a.reshape(3,1)的形状是(3,1),b的形状是(3,),广播后:

  • a会被扩展为(3,3),每行都是[a[0], a[0], a[0]]、[a[1], a[1], a[1]]、[a[2], a[2], a[2]]
  • b会被扩展为(3,3),每列都是[b[0], b[0], b[0]]、[b[1], b[1], b[1]]、[b[2], b[2], b[2]]
  • 对应元素相乘后,就得到了你需要的每行是a[i] * b的矩阵。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:05:37