簡體   English   中英

如何繪制隨機生成矩陣的最大特征值?

[英]How do i plot the largest eigenvalues for randomly generated matrix?

我試圖繪制隨機生成的鄰接矩陣的特征值以獲得看起來像高斯分布的東西,我試圖改變和修復生成圖的概率並按其頻率繪制最大的特征值,但是我不知道如何做這些二,這是我的代碼:

import numpy as np
import random
import matplotlib.pyplot as plt
import scipy.linalg as la

print("Please input the amount of times you want to repeat this: ")
userInput = int(input())
print("This will repeat {} times".format(userInput))
print("--------------------------------------------")
largestEig = []


for x in range(userInput):
    n = 3
    print("Random number is: {}".format(n))
    adjMatrix = np.random.randn(0,2,(n,n))
    np.fill_diagonal(adjMatrix, 0)
    i_lower = np.tril_indices(n, -1)
    adjMatrix[i_lower] = adjMatrix.T[i_lower]
    eigvals, eigvecs = la.eig(adjMatrix)
    m = max(eigvals)
    largestEig.append(m)
    print("For {}, M = {}".format(n, m))
    
    print(adjMatrix)
    
print("---------------------------------------------")
print("The List:")
print(largestEig)



plt.plot(largestEig)
plt.show()

嘗試運行您的代碼時,我在生成矩陣的行中收到錯誤消息。

我假設您想創建一個帶有隨機值的方陣。

在這種情況下,您可能需要查看np.random.uniform

n=3
adjMatrix = np.random.uniform(0,10,(n,n)) 

對於分布的繪圖,您可能需要查看plt.hist()

plt.hist(largestEig, bins=50)

添加這些更改,並刪除 input 和 print 語句,結果如下:

largestEig = []

userInput=10000
for x in range(userInput):
    n = 3
    adjMatrix = np.random.uniform(0,10,(n,n))
    np.fill_diagonal(adjMatrix, 0)
    i_lower = np.tril_indices(n, -1)
    adjMatrix[i_lower] = adjMatrix.T[i_lower]
    eigvals, eigvecs = la.eig(adjMatrix)
    m = max(eigvals)
    largestEig.append(m)



plt.hist(largestEig, bins=50)
plt.show()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM