【问题标题】:Faster Computation for Double For Relative Position Loop in PythonPython中Double For相对位置循环的更快计算
【发布时间】:2020-03-08 20:31:13
【问题描述】:

我有以下计算数组X[n]的相对位置的问题:

Equation Image

我目前正在做以下计算:

让我们以X = [1,2,3,4,5,6,7,8,9,10],然后:

D = []
for idx1 in range(0,len(X)):
    aux = []
    for idx2 in range(idx1, len(X)):
        aux.append(np.sign(X[idx1]-X[idx2]))
    D.append(np.sum(aux))

这段代码的输出是:

D = [-9, -8, -7, -6, -5, -4, -3, -2, -1, 0]

但是,对于太长的 X 数组,这个计算非常慢!有人对如何使其更快有任何建议吗?由于中间的“辅助”步骤,并行并不是那么容易的两个!我在考虑一些矩阵方法。

【问题讨论】:

    标签: python for-loop matrix parallel-processing sparse-matrix


    【解决方案1】:

    之前可以将X 转换为np.array 类型。

    X = np.array([1,2,3,4,5,6,7,8,9,10])
    

    然后像这样做一个矢量化循环:

    D = [np.sum(np.sign(X[idx1]-X[idx1:])) for idx1 in range(0,len(X))]
    

    应该会快很多。

    请注意,可能还有更聪明的算法。这个以O(n^2) 时间计算结果(其中n = len(X))。

    【讨论】:

    • 这使它更快杰罗姆理查德。是的,这个算法是自顶向下的算法,计算效率非常低!非常感谢您分享您的解决方案。也谢谢@Mark Mayer!两种解决方案都很棒!
    猜你喜欢
    • 2023-03-21
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多