numpy数组上的高效行操作

时间:2018-05-10 11:08:14

标签: python arrays numpy

我想在numpy数组的行上运行一个操作(例如减去中位数)。

一种方法是使用理解列表:

import numpy as np
from statistics import median 
x = np.array([[1, 2, 3, 4], [5, 6, 7 ,8], [9, 10, 11, 12]])

xm = np.vstack(([x[i,:] - median(x[i,:]) for i in range(x.shape[0])]))

处理每一行,然后垂直堆叠为numpy数组。

有更高效/优雅的方法吗?

1 个答案:

答案 0 :(得分:4)

x - np.median(x, axis=1)[:, np.newaxis]

如果np.median有一个keepdims参数,您还可以避免手动切片以使其对广播友好

x - np.median(x, axis=1, keepdims=True)

如果你想逐行应用任意函数,比如来自median的{​​{1}},你可以使用statistics,只要注意它基本上是np.apply_along_axis循环,所以你没有真正得到任何矢量化加速:

for