我想在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数组。
有更高效/优雅的方法吗?
答案 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