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

如何高效向量化生成累积乘积三角矩阵?

问题描述

给定一维向量(例如 [a b c d]),需要构建如下下三角矩阵:

a    0   0  0
ab   b   0  0
abc  bc  c  0
abcd bcd cd d

现有实现代码存在不必要的for循环,不够简洁:

import numpy as np

v = np.array([1, 2, 3])
n = len(v)
matrix = np.zeros((n,n))
for i in range(n):
    matrix [i,:i+1] = np.flip(np.cumprod(np.flip(v[:i+1])))

print(matrix)
# [[1. 0. 0.]
#  [2. 2. 0.]
#  [6. 6. 3.]]

请问如何对该实现进行向量化优化?

向量化优化方案

可以利用累积乘积的数学性质实现完全向量化,无需循环:

import numpy as np

v = np.array([1, 2, 3])
n = len(v)
# 生成带前缀1的累积乘积数组
cum_v = np.concatenate([[1], np.cumprod(v)])
# 获取所有位置的行列索引矩阵
i, j = np.indices((n, n))
# 一次性完成矩阵赋值:下三角区域计算乘积,上三角区域置0
matrix = np.where(i >= j, cum_v[i+1] / cum_v[j], 0)

print(matrix)
# [[1. 0. 0.]
#  [2. 2. 0.]
#  [6. 6. 3.]]

原理说明

  • 构造带前缀1的cum_v数组后,任意子数组v[j:i+1]的乘积可以直接通过cum_v[i+1] / cum_v[j]计算,避免逐段重复计算乘积。
  • np.indices生成的索引矩阵能一次性覆盖所有矩阵位置,配合np.where可以批量完成条件判断与赋值,彻底消除循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:03:37