【问题标题】:Update 2D numpy array values更新 2D numpy 数组值
【发布时间】:2013-12-22 02:18:44
【问题描述】:

有没有更有效的方法来更新多维 numpy 数组的值?
例如,我有一个循环

        for i in np.arange(5):
            for j in np.arange(5):  
                if (i + j) % 2 == 0:   
                    v[i,j] = v[i,j] + v[i, j + 1]  

我正在考虑稍后将这个过程并行化(使用multiprocessingPool),但我无法想象如何实现。也许定义一个函数并使用map,但这是一个二维数组,操作取决于元素索引。

【问题讨论】:

    标签: python arrays function numpy


    【解决方案1】:

    基本上你是这样做的:

    您可以使用切片索引分两行执行此操作:

    v[0:5:2,0:5:2] += v[0:5:2,1:6:2]    # even rows
    v[1:5:2,1:5:2] += v[1:5:2,2:6:2]    # odd rows
    

    【讨论】:

    • 您的回答使偶数行保持不变。应该有另一个声明来处理这个问题。
    • @Ray 是的,我想我现在已经修好了
    • 看到了。 +1 图解说明。
    • 感谢您的回答。这是进行这种计算的唯一方法吗?我对我的代码有更复杂的操作(这就是为什么我在我的问题中说这是一个例子),但基本上,偶数平方更新独立于奇数平方更新。我想要的是并行化所有这些计算。如果我使用您的答案,则代码比执行 for 循环更长,但可能更快。如果我没有得到更多的想法,我会将您的想法标记为已接受,再次感谢。
    • 并行化通常是您在这些情况下想要使用的最后一个工具。很好地实现更痛苦,它增加了更多的复杂性和开销,对于像这样的简单操作,您可能会看到很少(如果有的话)性能优势。你最好学习在 numpy 中充分利用矢量化。
    猜你喜欢
    • 1970-01-01
    • 2022-08-16
    • 2016-06-13
    • 2012-12-23
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2013-12-14
    相关资源
    最近更新 更多