【问题标题】:Vectorized Computation of Compositional Variance成分方差的向量化计算
【发布时间】:2015-10-17 22:16:47
【问题描述】:

给定一个带有 xi, j 项的 n X m 矩阵,compositional variance 是一个 m X m 矩阵,其中 i, j 条目包括表达式

k = 1n [ ln2(xk, i / xk, j)]

(它包括其他容易计算的表达式)。

这在循环中很容易计算,但是如何使用向量化计算呢?


这是糟糕的循环代码:

x = np.array([[1, 2, 3], [4, 5, 6]], dtype=float)

v = np.zeros((3, 3))

for i in range(3):
    for j in range(3):
        for k in range(2):
            v[i, j] += np.log(x[k, i] / x[k, j])**2

【问题讨论】:

    标签: python numpy statistics vectorization


    【解决方案1】:

    假设您在 NumPy 术语中表示类似 (np.log(x[k, i] / x[k, j])**2) 的意思,将 k = 1:n 相加,则可以建议使用 broadcasting 一种矢量化方法 -

    ((np.log(x[:,:,None]/x[:,None])**2)).sum(0)
    

    【讨论】:

    • 谢谢。你写的广播很有趣,我会研究一下,但我不同意关于意图的假设:我的意思是对数平方。
    • :-) IDK,但是,因为我还不明白你做了什么。非常感谢您的回答。我当然想试试。赞赏!
    • @AmiTavory 我猜你可以添加在问题中使用的循环代码?这可以用于验证:)
    • 这是一个很好的建议,Divakar - 我会尽快完成(现在不能)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2014-08-10
    相关资源
    最近更新 更多