微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Scipy 计算 Mann Whitney U 沿多个切片

如何解决Scipy 计算 Mann Whitney U 沿多个切片

给定以下数组:

testvar

我想对各个样本的每个切片运行一次 Mann-Whitney(-Wilcoxon) U 检验,并将结果填充到一个输出数组中,其中一个切片用于 U 统计量,另一个切片用于 p 值。 我知道我可以像这样单独运行它们:

import numpy as np
from scipy.stats import mannwhitneyu

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

输出

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]) 但数组参数只接受一个输入,而我有 2 个。 此外,我需要尽可能最快的解决方案,因为我将在模拟过程中对数千个切片执行此操作。

提前致谢!

解决方法

您可以使用 map(...),这是最好的选择,并且比 np.apply_along_axis(...) 快得多,因为它在内部使用 python loop,以及一些计算成本高的操作 ie transpose(...)view(...),因此在通常情况下,即使使用 python 循环遍历 Numpy 数组也会更快。


import numpy as np
from scipy.stats import mannwhitneyu

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

idx = np.arange(len(s1))

def step(i):

  return [*mannwhitneyu(s1[i],s2[i])]

np.array(list(map(step,idx)))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。