numpy

2013-07-13 14 views
9

का उपयोग कर पायथन में varimax रोटेशन प्रदर्शन मैं मैट्रिक्स के मुख्य घटक विश्लेषण पर काम कर रहा हूँ। मैं पहले से ही घटक मैट्रिक्स नीचेnumpy

A = np.array([[-0.73465832 -0.24819766 -0.32045055] 
       [-0.3728976 0.58628043 -0.63433607] 
       [-0.72617152 0.53812819 -0.22846634] 
       [ 0.34042864 -0.08063226 -0.80064174] 
       [ 0.8804307 0.17166265 0.04381426] 
       [-0.66313032 0.54576874 0.37964986] 
       [ 0.286712 0.68305196 0.21769803] 
       [ 0.94651412 0.14986739 -0.06825887] 
       [ 0.40699665 0.73202276 -0.08462949]]) 

मैं इस घटक मैट्रिक्स में varimax रोटेशन प्रदर्शन करने की जरूरत है, लेकिन सटीक तरीका और डिग्री बारी बारी से करने के लिए नहीं मिल सकता है पता चला पाया है। अधिकांश उदाहरण आर में दिखाए जाते हैं। हालांकि मुझे पायथन में विधि की आवश्यकता है।

+1

+1 अच्छा सवाल है, मुझे भी एक ही समस्या का सामना करना पड़ रहा है .. – nKandel

उत्तर

7

आप अजगर के साथ उदाहरण के एक बहुत कुछ मिल सकता है। यहाँ एक उदाहरण मैं केवल numpy का उपयोग कर अजगर के लिए मिल गया है, Wikipedia पर है:

def varimax(Phi, gamma = 1, q = 20, tol = 1e-6): 
    from numpy import eye, asarray, dot, sum, diag 
    from numpy.linalg import svd 
    p,k = Phi.shape 
    R = eye(k) 
    d=0 
    for i in xrange(q): 
     d_old = d 
     Lambda = dot(Phi, R) 
     u,s,vh = svd(dot(Phi.T,asarray(Lambda)**3 - (gamma/p) * dot(Lambda, diag(diag(dot(Lambda.T,Lambda)))))) 
     R = dot(u,vh) 
     d = sum(s) 
     if d/d_old < tol: break 
    return dot(Phi, R) 
+0

धन्यवाद अब यह काम कर रहा है –

+1

मेरा मानना ​​है कि यह तर्क सूची में "गामा = 1.0" होना चाहिए। अन्यथा, एसवीडी इनपुट की गणना करते समय "गामा/पी" को पूर्णांक विभाजन के रूप में माना जाएगा और परिणामस्वरूप 0 होगा यदि पी> 1 (जो आमतौर पर है)। –

+0

@ आरएमजी जब तक यह पायथन 3 नहीं है या वह '__future__ आयात प्रभाग' से उपयोग कर रहा है। – gerrit

5

विकिपीडिया में पाइथन here में एक उदाहरण है!

उदाहरण भारोत्तोलन और numpy के लिए यह सिलाई:

from numpy import eye, asarray, dot, sum, diag 
from numpy.linalg import svd 
def varimax(Phi, gamma = 1.0, q = 20, tol = 1e-6): 
    p,k = Phi.shape 
    R = eye(k) 
    d=0 
    for i in xrange(q): 
     d_old = d 
     Lambda = dot(Phi, R) 
     u,s,vh = svd(dot(Phi.T,asarray(Lambda)**3 - (gamma/p) * dot(Lambda, diag(diag(dot(Lambda.T,Lambda)))))) 
     R = dot(u,vh) 
     d = sum(s) 
     if d_old!=0 and d/d_old < 1 + tol: break 
    return dot(Phi, R) 
+0

असल में मैं scipy लेकिन thanx के बजाय numpy का उपयोग करने के लिए देख रहा था। मैंने पहले ही –

+2

@ स्टेवबेर्न्स में देखा है: 'numpy.linalg.svd'। –

+1

@ राजसबिट: उस उदाहरण में आयात (और संभवतः होना चाहिए) दो पंक्तियों में बदल सकता है: 'numpy import eye, asarray, dot, sum' और 'numpy.linalg import svd' से। –

1

मैं तो कई बार ढेर-अतिप्रवाह पर अजगर में कारक विश्लेषण करने के लिए समाधान ऊपर देखा है, कि मैं हाल ही में मेरे अपने पैकेज बनाया है, fa-kit। भले ही यह एक पुरानी पोस्ट है, फिर भी मैं इस लिंक को फेंक रहा हूं अगर भविष्य में कोई और है जो Google के माध्यम से यहां आता है।

 संबंधित मुद्दे