我有一个数组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
?
答案 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循环,设置结果的类型和大小也可能有助于加快速度。