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

已知行向量,如何用最简方法构造二维矩阵?附NumPy代码示例

从行向量构造目标二维矩阵的最简实现方法

嘿,我来帮你优化这个实现!你要从行向量生成那种每行取原向量从第i位开始、后面补零的二维矩阵,其实完全不用写for循环,用NumPy的向量化操作就能一步搞定,比你给的代码简洁高效多了。

先看看你原来的代码逻辑(顺便提个小问题:np.zeros的参数应该是元组(3,3)哦):

import numpy as np
a = [1,2,3]
A = np.zeros((3,3))
for i in range(0,3):
    A[i][:] = a[i:3]

这段代码能得到目标矩阵,但手动循环在处理大数组时效率不高,代码也不够紧凑。

方法1:列表推导式+补零(直观易懂)

用np.pad给每个切片补零,再用np.array直接转成矩阵,一行就能搞定:

import numpy as np
a = np.array([1,2,3])
n = len(a)
A = np.array([np.pad(a[i:], (0, i), constant_values=0) for i in range(n)])

运行后A就是你要的结果:

array([[1., 2., 3.],
       [2., 3., 0.],
       [3., 0., 0.]])

方法2:向量化操作(高效简洁,适合大数组)

利用NumPy的广播特性,直接通过索引判断赋值,完全不需要循环:

import numpy as np
a = np.array([1,2,3])
n = len(a)
# 生成行和列的索引矩阵
rows, cols = np.indices((n, n))
# 当列索引>=行索引时取a[cols],否则取0
A = np.where(cols >= rows, a[cols], 0)

这个方法的优势是完全向量化,处理大规模数据时速度比循环快很多,代码也更紧凑。

这两种方法都比原来的循环实现更简洁,而且符合NumPy的最佳实践~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:38:42