【问题标题】:Numpy iterative array operationNumpy 迭代数组操作
【发布时间】:2019-05-02 13:33:20
【问题描述】:

我已经开始通过使用 numpy 数组操作来删除越来越多的 for 循环。但是,我坚持以下情况。欢迎任何帮助。

我从长度为 L 的数组 A 和长度为 L 的另一个数组 B 中的单个已知值 (0.55) 开始。我想使用交叉乘法填充第一个数组中的剩余值。

这给了我想要的输出:

def cross_mult(B, starting_A = 0.55):
    A= np.zeros(B.shape)
    A[0] = starting_A   
    for i in range(B.shape[0])[1:]:
        A[i] = A[i-1] * B[i] / B[i-1]
    return A

没有 for 循环的尝试失败:

def cross_mult(B, starting_A = 0.55):
    A= np.zeros(B.shape)
    A[0] = starting_A 
    A[1:] = A[:-1] * B[1:] / B[:-1]
    return A

我明白了:

array([0.55      , 0.60401715, 0.       ])

而不是一个包含三个值的完全填充的数组。

【问题讨论】:

    标签: python arrays python-3.x numpy for-loop


    【解决方案1】:

    向量化这个函数的问题是每个索引的计算实际上确实依赖于它之前的索引,所以计算必须按顺序进行。

    据我所知,在这种情况下你会被困在循环中:)

    如果你真的想避免显式使用循环,你可以使用accumulate:

    def cross_mult(B, starting_A = 0.55):
        A= np.zeros(B.shape)
        A[0] = starting_A 
        A[1:] = B[1:] / B[:-1]
        return np.multiply.accumulate(A)
    

    【讨论】:

      猜你喜欢
      • 2018-11-17
      • 2014-03-11
      • 2022-11-22
      • 2017-02-17
      • 2013-01-04
      • 2013-05-05
      • 2011-10-03
      • 2016-01-28
      • 1970-01-01
      相关资源
      最近更新 更多