Python 沿多个切片的Scipy计算Mann-Whitney U

Python 沿多个切片的Scipy计算Mann-Whitney U,python,arrays,numpy,scipy.stats,Python,Arrays,Numpy,Scipy.stats,给定以下数组: import numpy as np from scipy.stats import mannwhitneyu s1 = np.array([[1,2,3,4,5,6,7,8,0,10],[10,9,8,7,6,5,4,3,2,1]]) s2 = np.array([[1,11,3,7,5,6,7,8,0,10],[10,9,8,7,6,15,4,13,2,1]]) 我想对各个样本的每个切片运行一次Mann-Whitney(-Wilcoxon)U测试,并将结果填充到一个输出数

给定以下数组:

import numpy as np
from scipy.stats import mannwhitneyu

s1 = np.array([[1,2,3,4,5,6,7,8,0,10],[10,9,8,7,6,5,4,3,2,1]])
s2 = np.array([[1,11,3,7,5,6,7,8,0,10],[10,9,8,7,6,15,4,13,2,1]])
我想对各个样本的每个切片运行一次Mann-Whitney(-Wilcoxon)U测试,并将结果填充到一个输出数组中,其中一个切片用于U统计,另一个用于p值。 我知道我可以像这样单独运行它们:

r1 = mannwhitneyu(s1[0], s2[0])
r2 = mannwhitneyu(s1[1], s2[1])
输出:

MannwhitneyuResult(statistic=39.5, pvalue=0.2239039981060696)
MannwhitneyuResult(statistic=37.0, pvalue=0.17162432050520815)
期望输出:

array([39.5, 0.2239039981060696], [ 37.0, 0.17162432050520815])
我尝试了
np.apply_沿_轴
但是数组参数只接受一个输入,我有两个。 此外,我需要尽可能快的解决方案,因为我将在数千个切片上执行此操作,作为模拟的一部分

提前谢谢

您可以使用
映射(…)
,这是最好的选择,而且比
np快得多。沿轴(…)
应用,因为它使用内部的,以及一些计算成本很高的ops,即
转置(…)
视图(…)
,所以在通常情况下,即使使用python循环遍历Numpy数组,也会更快





在return命令中,星号的作用是什么?我用自己制作的一个自定义函数尝试了这一点,但必须删除星号才能使其正常工作。星号解压iterable对象,您可以检查输出数组,如果删除它,可以检查形状,
np.array(list(map(step,idx))。形状
import numpy as np
from scipy.stats import mannwhitneyu

s1 = np.array([[1,2,3,4,5,6,7,8,0,10],[10,9,8,7,6,5,4,3,2,1]])
s2 = np.array([[1,11,3,7,5,6,7,8,0,10],[10,9,8,7,6,15,4,13,2,1]])

idx = np.arange(len(s1))
def step(i):

  return [*mannwhitneyu(s1[i], s2[i])]
np.array(list(map(step, idx)))