【问题标题】:Symmetric matrices in numpy?numpy中的对称矩阵?
【发布时间】:2011-02-01 06:55:12
【问题描述】:

嗨,

我希望在 python 中启动一个对称矩阵并用零填充它。

目前,我已经启动了一个已知维度的数组,但这不适合作为距离矩阵的后续输入。

numpy 中是否有任何“简单”的方法来创建对称矩阵?

谢谢, D.

编辑

我应该澄清一下 - 创建“对称”矩阵很好。但是我只对生成下三角形感兴趣,即

ar = numpy.zeros((3, 3))

array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])

我想要:

array([[ 0],
       [ 0, 0 ],
       [ 0.,  0.,  0.]])

这可能吗?

【问题讨论】:

  • 您能否详细说明unsuitable for subsequent input into R as a distance matrix 的含义。你还没有标记R,那么它是否相关?谢谢
  • 抱歉 - 不,这并不重要。项目之间的距离(欧几里得、曼哈顿、余弦等)以成对方式计算,因此是对称输出。我正在计算自定义矩阵,因为 R 不能很好地处理我的数据。不过那是另一回事了。为混乱道歉!
  • @Darren:仍然不确定您在寻找什么。您是否可能建议您仅计算例如上三对角部分,而神奇地低三对角部分会反映这一点?即使是可行的,我也会期待性能惩罚。你愿意展示你拥有的任何代码吗?
  • 我认为 EOL 对类似 Q 的回答是正确的 (stackoverflow.com/questions/2572916/…)
  • 如果你想要一个快速距离矩阵计算,看看scipy.spatial.pdistdocs.scipy.org/doc/scipy/reference/generated/…

标签: python matrix numpy symmetric


【解决方案1】:

我认为尝试使用这种三角形数组是不可行的。

例如,这里是(平方)成对欧几里德距离的简单实现:

def pdista(X):
    """Squared pairwise distances between all columns of X."""
    B= np.dot(X.T, X)
    q= np.diag(B)[:, None]
    return q+ q.T- 2* B

在性能方面很难击败它(在 Python 级别)。不使用这种方法的主要优势是什么?

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 2015-05-08
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 2011-08-17
    相关资源
    最近更新 更多