Estoy tratando de generar matrices simétricas en numpy. Específicamente, estas matrices deben tener entradas de lugares aleatorios, y en cada entrada los contenidos pueden ser aleatorios. A lo largo de la diagonal principal, no nos preocupamos por las entidades que están ahí, así que también las aleatoricé.Generando Matrices Simétricas en Numpy
El enfoque que he tomado es generar primero una matriz nxn all zero y simplemente recorrer los índices de las matrices. Sin embargo, teniendo en cuenta que el bucle es relativamente caro en Python, me pregunto si puedo lograr lo mismo sin usar bucles de pitón.
¿Hay algunas cosas integradas en numpy que me permitan alcanzar mi objetivo de manera más eficiente?
Aquí está mi código actual:
import numpy as np
import random
def empty(x, y):
return x*0
b = np.fromfunction(empty, (n, n), dtype = int)
for i in range(0, n):
for j in range(0, n):
if i == j:
b[i][j] = random.randrange(-2000, 2000)
else:
switch = random.random()
random.seed()
if switch > random.random():
a = random.randrange(-2000, 2000)
b[i][j] = a
b[j][i] = a
else:
b[i][j] = 0
b[j][i] = 0
Gracias! Esa es una solución eficiente. Sin embargo, ¿hay alguna manera de que pueda colocar ceros en lugares al azar? Se supone que esta matriz representa un tipo de matriz de adyacencia para un gráfico, por lo que es preferible tener una matriz con cero distribuidos aleatoriamente. – Ryan
@Ryan: ¿Te importa qué tipo de distribución tienen las entradas aleatorias? Si agrega 'b + b.T', obtendrá una distribución no uniforme concentrada alrededor de 0. – unutbu
Estoy verificando algunas propiedades de las matrices.Es más un esfuerzo para proporcionar evidencia convincente de algunas propiedades matemáticas, por lo que la distribución aquí no es tan importante. ¡Gracias! – Ryan