Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy阵列上的高效行操作_Python_Arrays_Numpy - Fatal编程技术网

Python numpy阵列上的高效行操作

Python numpy阵列上的高效行操作,python,arrays,numpy,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数组 有没有更

我想在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数组

有没有更有效/优雅的方法

x - np.median(x, axis=1)[:, np.newaxis]
给定
np.median
有一个
keepdims
参数,您还可以避免手动切片,使其便于广播

x - np.median(x, axis=1, keepdims=True)
如果您想逐行应用任意函数,如
statistics
中的
median
,您可以使用
np。沿_轴应用
,只需注意它基本上是一个
for
循环,因此您不会真正获得任何矢量化加速:

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

如果操作没有轴选项,该怎么办。e、 g.python统计库中的中位数?我不熟悉
statistics
library,我想您可以使用
np。沿_轴应用_(中位数,1,x)
但它没有numpy native那么有效one@Nir
numpy
median
statistics
median
之间没有区别-在所有情况下,它们应该返回相同的结果,但当输入为空列表时,它们的行为略有不同。我只会使用
numpy
version。