Создание симметричных матриц в Numpy

Я пытаюсь сгенерировать симметричные матрицы в numpy. В частности, эти матрицы должны иметь элементы со случайными позициями, и в каждом элементе содержимое может быть случайным.Вдоль главной диагонали нас не интересует, какие сущности там находятся, поэтому я рандомизировал и их.

Подход, который я избрал, состоит в том, чтобы сначала сгенерировать матрицу nxn со всеми нулями и просто перебрать индексы матриц. Однако, учитывая, что циклы в python относительно дороги, мне интересно, смогу ли я добиться того же, не используя циклы python for.

Есть ли какие-то встроенные в numpy вещи, которые позволяют мне более эффективно достигать моей цели?

Вот мой текущий код:

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
27
задан unutbu 29 May 2012 в 21:17
поделиться