【问题标题】:How to return array from element-wise calculation on two different arrays?如何从两个不同数组的元素计算中返回数组?
【发布时间】:2017-04-19 20:49:01
【问题描述】:

我有以下两个 n 元素的 numpy 数组:

A = np.array([2 5 8 9 8 7 5 6])
B = np.array([8 9 6 5 2 8 5 7])

我要获取数组C:

C = np.array([sqrt(2^2+8^2) sqrt(5^2+9^2) ... sqrt(6^2+7^2)])

也就是说,数组 C 将由 n 个元素组成;每个元素将等于 A 中相应元素平方的平方根加上 B 中相应元素的平方。

我尝试使用np.apply_along_axis,但似乎此功能仅适用于一个数组。

【问题讨论】:

  • 为什么不使用矢量化 ufunc:np.sqrt(A**2 + B**2)

标签: python arrays numpy square-root


【解决方案1】:

如 cmets 中所述,您可以使用:

C = np.sqrt(A**2 + B**2)

或者你可以使用comprehensionzip

C = [sqrt(a**2 + b**2) for a, b in zip(A,B)]

【讨论】:

    【解决方案2】:

    如果您的数组很大,请考虑使用np.square 而不是** 运算符。

    In [16]: np.sqrt(np.square(A) + np.square(B))
    Out[16]: 
    array([  8.24621125,  10.29563014,  10.        ,  10.29563014,
             8.24621125,  10.63014581,   7.07106781,   9.21954446])
    

    但执行时间的差异非常小。

    In [13]: ar = np.arange(100000)
    
    In [14]: %timeit np.square(ar)
    10000 loops, best of 3: 158 µs per loop
    
    In [15]: %timeit ar**2
    10000 loops, best of 3: 179 µs per loop
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-23
      • 2018-12-25
      • 1970-01-01
      • 2016-08-31
      • 2022-01-15
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      相关资源
      最近更新 更多