मैं गतिशील Toeplitz matrices बना रहा हूं ताकि वे अनुमान लगा सकें कि वे अचूक हैं। मेरा वर्तमान कोडयादृच्छिक मैट्रिक्स गणना
import random
from scipy.linalg import toeplitz
import numpy as np
for n in xrange(1,25):
rankzero = 0
for repeats in xrange(50000):
column = [random.choice([0,1]) for x in xrange(n)]
row = [column[0]]+[random.choice([0,1]) for x in xrange(n-1)]
matrix = toeplitz(column, row)
if (np.linalg.matrix_rank(matrix) < n):
rankzero += 1
print n, (rankzero*1.0)/50000
क्या यह बढ़ाया जा सकता है?
मैं अधिक सटीकता प्राप्त करने के लिए 50000 मूल्य बढ़ाना चाहता हूं लेकिन वर्तमान में ऐसा करना बहुत धीमा है।
का उपयोग कर रूपरेखा केवल for n in xrange(10,14)
से पता चलता
400000 9.482 0.000 9.482 0.000 {numpy.linalg.lapack_lite.dgesdd}
4400000 7.591 0.000 11.089 0.000 random.py:272(choice)
200000 6.836 0.000 10.903 0.000 index_tricks.py:144(__getitem__)
1 5.473 5.473 62.668 62.668 toeplitz.py:3(<module>)
800065 4.333 0.000 4.333 0.000 {numpy.core.multiarray.array}
200000 3.513 0.000 19.949 0.000 special_matrices.py:128(toeplitz)
200000 3.484 0.000 20.250 0.000 linalg.py:1194(svd)
6401273/64.421 0.000 2.421 0.000 {len}
200000 2.252 0.000 26.047 0.000 linalg.py:1417(matrix_rank)
4400000 1.863 0.000 1.863 0.000 {method 'random' of '_random.Random' objects}
2201015 1.240 0.000 1.240 0.000 {isinstance}
[...]
बहुत बहुत धन्यवाद। क्या आपको कोई विचार है जब रैंक किसी भी मौके से अलग हो जाता है? एक बहुत छोटी बात, 5000 को नीचे 50000 से मेल खाना चाहिए। – marshall
det() बनाम रैंक() - यह आपके सीपीयू पर निर्भर हो सकता है। मैं बस एक छोटा परीक्षण % टाइमिट det (np.random.randint (0,2, आकार = (25,25)) बनाम % टाइमिट matrix_rank (np.random.randint (0,2, आकार = (25,25)) 5000 बनाम 50000 के बारे में, मैंने जानबूझकर इसे आसान परीक्षण के लिए छोटा बनाया –
det (np.random.randint (0,2, आकार = (25,25))) लगभग 42 हमें और matrix_rank (एनपी .random.randint (0,2, आकार = (25,25))) लगभग 190 है। बहुत स्पष्ट। – marshall