numpy 如何生成对角线上为零的随机值矩阵?

lokaqttq  于 2023-03-02  发布在  其他
关注(0)|答案(2)|浏览(223)

我想得到一个主对角线为零的随机值矩阵,下面的代码可以处理整数值,但我实际上需要浮点值。

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)

所以我试着

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)

然后碰巧创建了一个额外的维度。我想像c [0][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)
xtupzzrd

xtupzzrd1#

您使用的NumPy包中的fill_diagonal函数将允许您填充任何数组的对角线,而不管其维数如何。

import numpy as np

# Generates a 5x5 matrix/nested list of random float values
matrix = np.random.rand(5, 5)

# Sets diagonal values to zero
np.fill_diagonal(matrix, 0)

print(matrix)

# Example Matrix
[[0.         0.50388405 0.62069521 0.93842045 0.75608882]
 [0.35300814 0.         0.48357286 0.59268458 0.15213251]
 [0.63591576 0.61143272 0.         0.91271144 0.53997033]
 [0.01979816 0.66435396 0.03416005 0.         0.02524777]
 [0.62694323 0.02307084 0.32458185 0.7663526  0.        ]]

# Accessing specific elements
matrix[1][3]
0.5926845768187102

文档here的功能。干杯!

lrl1mhuk

lrl1mhuk2#

def custom_matrix(low, high, n):
    array = np.random.uniform(low, high, (n, n))
    for i in range(n):
        array[i][i] = 0
    return array    

custom_matrix(0, 1, 3)

# returns 
# [[0.         0.56331153 0.09965334]
# [0.10010369 0.         0.79204369]
# [0.66917184 0.67228158 0.        ]]

相关问题