矢量化数组的行

时间:2011-05-09 19:18:34

标签: python numpy vectorization

我有一个数组X,我希望将函数f应用于X的所有行:

# silly example
X = numpy.array([[1, 2, 3, 4, 5],
                 [6, 7, 8, 9, 0]], 'i')

def f(row): return sum(row)

y = numpy.vectorize(f, 'i')(rows(X))

现在,y应为array([15,30], 'i')。哪种方法或切片魔术会以最有效的方式实现rows

3 个答案:

答案 0 :(得分:7)

NumPy实现了“在特定轴上行动”的概念。一般功能是numpy.apply_along_axis()

>>> numpy.apply_along_axis(sum, 1, X)
array([15, 30])

(其中sum当然可以被任何东西取代。)

答案 1 :(得分:0)

它必须是numpy提供的东西吗?因为我只看到列表理解

[action_to_apply(row) for row in X]

答案 2 :(得分:0)

这是另一个镜头,它考虑了结果的类型和大小:

numpy.fromiter((your_func(row) for row in X), dtype=bool, count=len(X))

即使循环不是C循环,设置结果的类型和大小也可能有助于加快速度。