如何生成主对角线为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)
修正后的浮点数版本
核心修正点:
- 将
np.random.uniform的size改为((n-1)*n,),生成一维浮点数数组,与原整数版本的数组结构保持一致 - 沿用原逻辑将一维数组切片为二维矩阵
- 使用
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
相关产品推荐
相关产品推荐

