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

基于一维NumPy数组生成指定下三角NaN矩阵的实现咨询

基于一维NumPy数组生成指定下三角NaN矩阵的实现咨询

嗨,我来帮你搞定这个问题!你已经找对了方向,用np.tril_indices定位下三角区域是个很棒的开始,接下来只需要几步就能生成你想要的矩阵啦。

首先先明确你的输入数组:

import numpy as np
U = np.array([3, 5, 7, 9, 11])

你想要的是下三角区域(不含对角线)填充U[i]-U[j]、其余位置为np.nan的矩阵,咱们一步步来实现:

  1. 初始化全NaN矩阵:先创建一个和目标形状一致的全NaN矩阵,这里是5×5的矩阵:
n = len(U)
result = np.full((n, n), np.nan)
  1. 获取下三角区域的索引:你提到的np.tril_indices(4, k=-1)可以调整为np.tril_indices(n, k=-1),这个函数会返回两个数组,分别对应下三角区域(不含对角线)的行索引和列索引:
rows, cols = np.tril_indices(n, k=-1)
  1. 填充计算值:用这些索引直接填充U[rows] - U[cols]即可,因为每一组(row, col)正好对应你需要的U[row] - U[col]:
result[rows, cols] = U[rows] - U[cols]

把这些步骤整合起来,完整代码如下:

import numpy as np

U = np.array([3, 5, 7, 9, 11])
n = len(U)
result = np.full((n, n), np.nan)
rows, cols = np.tril_indices(n, k=-1)
result[rows, cols] = U[rows] - U[cols]

print(result)

运行后输出的结果和你预期的完全一致:

[[ nan  nan  nan  nan  nan]
 [ -2  nan  nan  nan  nan]
 [ -4  -2  nan  nan  nan]
 [ -6  -4  -2  nan  nan]
 [ -8  -6  -4  -2  nan]]

简单解释下:np.tril_indices(n, k=-1)会返回所有满足row > col的索引对,正好对应你矩阵中需要填充计算值的位置,这种向量化操作比手动循环高效得多,也更贴合NumPy的使用风格。

备注:内容来源于stack exchange,提问作者IzaeDA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:34:48