对数组的行进行矢量化

14 投票
3 回答
8464 浏览
提问于 2025-04-16 17:18

我有一个数组 X,我想对 X 的每一行都应用一个函数 f

# 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

这是另一个尝试,考虑了结果的类型和大小:

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

虽然这个循环不是C语言的那种循环,但设置结果的类型和大小可能会帮助加快速度。

0

这一定要是numpy提供的东西吗?因为我看到的只是一个列表推导式。

[action_to_apply(row) for row in X]
10

NumPy实现了一个叫“在特定轴上进行操作”的概念。它的主要功能是 numpy.apply_along_axis()

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

(这里的 sum 当然可以换成其他任何操作)。

撰写回答