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

Python中生成元素为列号的可变维度n×n矩阵的技术问询

基于np.eye(n)生成元素等于列号的n×n矩阵

当然可以!其实只需要结合np.eye(n)和NumPy的广播机制就能轻松实现你要的效果,完全不用脱离np.eye(n)的基础来重构代码。

实现思路

np.eye(n)生成的是对角为1、其余为0的n×n单位矩阵,我们可以利用它生成一个全1的列向量,再和列号数组做广播乘法,就能得到每行都等于列号的目标矩阵。

代码示例

import numpy as np

n = 3  # 你可以替换成任意正整数
# 生成列号数组(从1开始计数)
col_numbers = np.arange(1, n+1)
# 基于np.eye(n)生成目标矩阵
target_matrix = np.eye(n) @ np.ones((n, 1)) * col_numbers

print(target_matrix)

输出结果(n=3时)

[[1. 2. 3.]
 [1. 2. 3.]
 [1. 2. 3.]]

原理解释

  1. np.eye(n) @ np.ones((n, 1)):单位矩阵和n×1的全1向量做矩阵乘法,会得到一个n×1的全1列向量(因为单位矩阵乘以任何向量都等于原向量,这里原向量是全1)。
  2. 这个全1列向量和形状为(1, n)的col_numbers(NumPy广播会自动将一维数组视为行向量)做乘法时,会自动把全1列向量扩展成n×n的全1矩阵,再和列号数组逐元素相乘,最终得到每个元素等于所在列号的矩阵。

更简洁的写法

如果你想更精简,也可以用np.eye(n)的求和操作来生成全1列向量:

target_matrix = np.eye(n).sum(axis=1, keepdims=True) * np.arange(1, n+1)

这里np.eye(n).sum(axis=1, keepdims=True)会对单位矩阵的每一行求和,得到n×1的全1列向量,后续的广播乘法逻辑和上面完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:46:55