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