【问题标题】:NumPy vectorized functionsNumPy 向量化函数
【发布时间】:2013-06-24 01:40:25
【问题描述】:

我最近开始使用 NumPy(到目前为止它真的很有用 - 为什么我不早点开始使用它?),但我仍然确定我做错了一些事情:

  • 如何将函数应用于向量(ndarray)?我希望它被矢量化,它是一个比乘法更复杂的函数。我试过使用np.where,但这似乎是一个丑陋的解决方案(我也不确定它是否矢量化)。是否有类似于 map 的函数,可以将我的函数矢量化?

  • 1234563 np.where 似乎是一个很好的解决方案,但除非我转置数组,否则它将不起作用:np.where(sum(a.T**2) > 10, a * 2, 0)(只是一个任意示例)。这看起来真的很冗长,转置没有多大意义。
  • 最后,如果我有一个 3 维数组 - 一个 2d 位置向量的二维数组(这样在位置 [1, 2] 将是向量 (1, 2))。如何遍历所有向量(使用向量化函数,例如 np.where)?我一直在使用np.reshape,但如果可能的话,我想保持数组相同的形状。

我将这些问题归为一组,因为它们看起来很相似,但如果我需要将它们分成单独的主题,请告诉我,我会这样做。

【问题讨论】:

  • 虽然有种方法可以完成您所描述的事情,但您可以查看pandas,它是为处理许多此类操作而设置的。
  • 第一个问题是什么意思?显然,您可以将多个算术和其他运算符链接在一起以构建更大的函数。否则,如果您想对函数进行矢量化,则需要使用 C 或 Fortran(或 Cython),因为 numpy 无法绕过对每个元素进行函数调用的开销。
  • 我不能,例如,例如,从每个元素求和创建一个新的 numpy 数组? (只是一个例子,我不会只是总结它)。
  • 我仍然不清楚你在问什么。您应该发布一些示例输入和输出来说明您的意思。另外,我真的建议您先查看 pandas 或 numba,因为它们可能会让您找到一个可行的解决方案(并且需要很少的努力)。

标签: python numpy vectorization


【解决方案1】:

就像上面的 cmets,我不太确定你在问什么。但是对于第一个问题,举个例子:

假设您有一个 numpy 二维向量数组,并且您想计算每个向量的范数。你不能这样做吗:

import numpy as np

x = np.arange(20).reshape(10,2)
norm_func = lambda z: sum(z**2)
norm_func(x.T)

这将给出结果

array([ 1,  5,  9, 13, 17, 21, 25, 29, 33, 37])

对于数组

array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [10, 11],
       [12, 13],
       [14, 15],
       [16, 17],
       [18, 19]])

【讨论】:

    猜你喜欢
    • 2016-12-07
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多