2011-05-20 48 views
1

請原諒我的無知,我對Python很陌生。我正在嘗試使用MDP在Python中執行因子分析(儘管如果有更好的解決方案,我可以使用其他庫)。在Python中使用MDP的因素分析

我N矩陣(稱爲矩陣)有米,我試圖做的:

import mdp 
mdp.nodes.FANode()(matrix) 

,但我回來一個錯誤。我猜可能我的矩陣沒有正確地形成?我的目標是找出數據中有多少組件,並找出哪些組件加載到哪些組件上。

這裏是回溯:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "mdp/signal_node.py", line 630, in __call__ 
    return self.execute(x, *args, **kwargs) 
    File "mdp/signal_node.py", line 611, in execute 
    self._pre_execution_checks(x) 
    File "mdp/signal_node.py", line 480, in _pre_execution_checks 
    self.train(x) 
    File "mdp/signal_node.py", line 571, in train 
    self._check_input(x) 
    File "mdp/signal_node.py", line 429, in _check_input 
    if not x.ndim == 2: 
AttributeError: 'list' object has no attribute 'ndim' 

沒有人有任何想法是怎麼回事,感覺像它解釋爲Python新手?

回答

4

我完全沒有經驗的mdp,但它看起來像它期望您的矩陣被傳遞爲一個Numpy數組而不是一個列表。 Numpy是高性能科學計算的一個軟件包。你可以去Numpy home page並安裝它。完成後,嘗試更改您的代碼:

import mdp, numpy 
mdp.nodes.FANode()(numpy.array(matrix)) 
+0

謝謝,仍然出現錯誤(「數據的協方差矩陣單數,冗餘維度需要刪除。」),但你的權利...需要在陣列()形式 – Jeff 2011-05-21 23:11:54

4

正如Stephen所說,數據必須是一個numpy數組。更準確地說,它必須是二維數組,第一個索引代表不同的樣本,第二個索引代表數據維度(在這裏使用錯誤的順序可能導致「奇異矩陣」錯誤)。

你也應該看看MDP documentation,這應該回答你所有的問題。如果這對MDP用戶郵件列表沒有幫助。

+0

謝謝,雖然我已經因爲決定爲我的項目使用gensim而不是mdp,而且事情變得更加順暢! – Jeff 2011-06-07 08:07:16

+0

@Jeff:MDP不是專門爲自然語言處理而設計的。因此,我可以想象gensim更適合。 – nikow 2011-06-07 08:44:35