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

如何生成主对角线为0的随机浮点数矩阵?

生成主对角线为0的随机浮点数矩阵(适配原有整数矩阵逻辑)

需求背景

已有可生成符合要求的整数矩阵函数matriz_custo,需要将其改造为浮点数版本,要求矩阵主对角线为0,且需适配原有逻辑(支持c[0][0]这类方式直接访问矩阵元素)。

原整数矩阵生成函数

def matriz_custo(n):
    numeros = sample(range(35,120+1),(n-1)*n)
    c = np.array([numeros[i:i+n] for i in range(0,len(numeros),n)])
    np.fill_diagonal(c, 0)
    c[0][n-1] = 0
    return (c)

错误实现的浮点数版本问题分析

尝试实现的matriz_custo_new存在额外维度问题,无法通过c[0][0]访问元素,核心问题:

  • np.random.uniform的size参数设为(n-1,n),直接生成了二维数组,后续通过列表推导式切片时,会将其封装为三维数组
  • 错误使用c[:,r,r] = np.inf的赋值方式,进一步加剧了维度不匹配问题

错误代码:

def matriz_custo_new(n):
    numeros = np.random.uniform(low=27.32, high=37.25, size=(n-1,n))
    c = np.array([numeros[i:i+n] for i in range(0,len(numeros),n)])
    r = np.arange(n-1)
    c[:,r,r] = np.inf
    c[0][n-1] = 0
    return (c)

修正后的浮点数版本

核心修正点:

  1. 将np.random.uniform的size改为((n-1)*n,),生成一维浮点数数组,与原整数版本的数组结构保持一致
  2. 沿用原逻辑将一维数组切片为二维矩阵
  3. 使用c[r,r]正确为主对角线元素赋值0,避免维度错误

修正后代码:

def matriz_custo_new(n):
    numeros = np.random.uniform(low=27.32, high=37.25, size=((n-1)*n,))
    c = np.array([numeros[i:i+n] for i in range(0,len(numeros),n)])
    r = np.arange(n-1)
    c[r,r] = 0
    c[0][n-1] = 0
    return (c)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:05:04