对数组的行进行矢量化
我有一个数组 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
当然可以换成其他任何操作)。