1

原谅我的无知,我对 Python 很陌生。我正在尝试使用 MDP 在 Python 中执行因子分析(尽管如果有更好的解决方案,我可以使用另一个库)。

我有一个 m x 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

2 回答 2

4

我完全没有使用 mdp 的经验,但看起来它希望您的矩阵作为 Numpy 数组而不是列表传递。Numpy 是一个高性能科学计算包。您可以转到 Numpy主页并安装它。这样做之后,尝试将您的代码更改为:

import mdp, numpy
mdp.nodes.FANode()(numpy.array(matrix))
于 2011-05-20T12:56:15.427 回答
4

正如斯蒂芬所说,数据必须是一个numpy数组。更准确地说,它必须是一个二维数组,第一个索引代表不同的样本,第二个索引代表数据维度(此处使用错误的顺序会导致“奇异矩阵”错误)。

您还应该查看MDP 文档,它应该可以回答您的所有问题。如果这没有帮助,可以使用 MDP 用户邮件列表。

于 2011-06-07T07:58:27.403 回答