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

Numpy新手求助:如何用dot/matmul高效实现乘法表

用Numpy高效实现乘法表(替代双重循环)

嘿,作为Numpy新手,我完全懂你想摆脱繁琐双重循环、用更高效的Numpy原生方法实现乘法表的需求!先帮你拆解下原来的代码逻辑:你是把数组a里的每一个元素i,和数组里的每一个元素j相乘,最后把所有乘积收集成一个一维列表。

下面给你几种Numpy的实现方式,包括你提到的dot和matmul,还有更直接的外积方法:

1. 最直接的方法:用np.outer(外积)

Numpy的outer函数天生就是用来计算两个数组所有元素对的乘积的,完美匹配你的双重循环逻辑!用法很简单:

import numpy as np

def numpy_mult_table(a):
    return np.outer(a, a).flatten()
  • np.outer(a, a)会返回一个二维矩阵,其中第i行第j列的元素就是a[i] * a[j]
  • .flatten()把二维矩阵转成一维数组,和你原来的result列表结构完全一致

2. 用dot或matmul实现

你提到的dot和matmul其实也能做到,不过需要先调整数组的维度,把一维数组转成二维的行/列向量:

def numpy_mult_table_dot(a):
    # 把a转成列向量(形状为(n,1))和行向量(形状为(1,n))
    col_vec = a.reshape(-1, 1)
    row_vec = a.reshape(1, -1)
    # 列向量点乘行向量得到二维乘积矩阵,再转成一维
    return np.dot(col_vec, row_vec).flatten()

# matmul的用法和dot在这里完全一致
def numpy_mult_table_matmul(a):
    col_vec = a.reshape(-1, 1)
    row_vec = a.reshape(1, -1)
    return np.matmul(col_vec, row_vec).flatten()

这里的核心是:二维列向量和二维行向量相乘,本质上就是在计算外积,结果和np.outer一样,最后 flatten 成一维就和你的循环结果一致了。

验证效果

我们可以拿一个示例数组测试下,比如a = np.array([1,2,3]):

  • 原来的循环方法返回[1,2,3,2,4,6,3,6,9]
  • 上面三种Numpy方法返回的一维数组和这个结果完全相同,而且速度比双重循环快得多(尤其是当a的元素数量很大时)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:29:17