Python 数组的元素中位数和百分位数

Python 数组的元素中位数和百分位数,python,arrays,numeric,median,percentile,Python,Arrays,Numeric,Median,Percentile,我正在使用数字Python。不幸的是,NumPy不是一个选项。如果我有多个阵列,例如: a=Numeric.array(([1,2,3],[4,5,6],[7,8,9])) b=Numeric.array(([9,8,7],[6,5,4],[3,2,1])) c=Numeric.array(([5,9,1],[5,4,7],[5,2,3])) 如何返回表示数组a、b和c的元素方向中值的数组?…例如 array(([5,8,3],[5,5,6],[5,2,3])) 然后看一个更一般的情况:给定

我正在使用数字Python。不幸的是,NumPy不是一个选项。如果我有多个阵列,例如:

a=Numeric.array(([1,2,3],[4,5,6],[7,8,9]))
b=Numeric.array(([9,8,7],[6,5,4],[3,2,1]))
c=Numeric.array(([5,9,1],[5,4,7],[5,2,3]))
如何返回表示数组a、b和c的元素方向中值的数组?…例如

array(([5,8,3],[5,5,6],[5,2,3]))

然后看一个更一般的情况:给定n个数组,我如何找到每个元素的百分位数?例如,返回表示10个数组中第30个百分位数的数组。非常感谢你的帮助

好吧,我不精通数字,但我将从一个简单的解决方案开始,看看我们是否能把它做得更好

要获得列表
foo
的第30个百分位,让
x=0.3
,对列表进行排序,并在
foo[int(len(foo)*x)]处选择元素

对于您的数据,您希望将其放入矩阵中,对其进行转置,对每行进行排序,并获得每行的中间值

Numeric中的矩阵(与numpy一样)是一个二维数组

我认为
bar=Numeric.array(a,b,c)
将生成您想要的数组,然后您可以使用'bar[:,n]'获得第n列,如果Numeric具有与Numpy相同的切片技术

foo = sorted(bar[:,n])
foo[int(len(foo)*x)]

我希望这对您有所帮助。

将您的二维数组堆栈组合成一个三维数组,
D=Numeric.array([a,b,c])
,然后在三维上排序。之后,连续的二维平面将按顺序排列,以便您可以提取低、高、四分位、百分位或中位数的平面。

将Raymond Hettinger的描述放入python:

a=Numeric.array(([1,2,3],[4,5,6],[7,8,9]))
b=Numeric.array(([9,8,7],[6,5,4],[3,2,1]))
c=Numeric.array(([5,9,1],[5,4,7],[5,2,3]))

d = Numeric.array([a, b, c])
d.sort(axis=0)
因为有n=3个输入矩阵,所以中位数应该是中间一个的中位数,一个被一索引

print d[n//2]
[[5 8 3]
 [5 5 6]
 [5 2 3]]

如果你有4个输入矩阵,你必须得到d[1]和d[2]的平均元素。

你说的“NumPy不是选项”是什么意思?数字python不是“numpy”吗?我认为它们太独立了。import Numeric适合我,但import numpy不适合。你能帮我写出来吗?我真的很感激。谢谢。@steelymatt我知道已经晚了,但我写了类似的东西——作为对另一个问题的回答。