2012-04-01 200 views
3

我正在使用数值Python。不幸的是,NumPy不是一种选择。如果我有多个阵列,如:使用数字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])) 

如何返回表示数组a,b和c ...如逐元素中位数的数组,

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

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

+0

你是什么意思“NumPy不是一个选项”?不是数字python'numpy'? – 2012-04-01 19:43:24

+0

我认为他们是分开的东西。导入数字适用于我,但导入numpy不适用。 – steelymatt 2012-04-01 22:13:21

回答

0

嗯,我不熟悉Numeric,但我只是从一个天真的解决方案开始,看看我们是否可以做得更好。

为了获取列表foox=0.3的30百分位数,对列表进行排序,并挑选元素在foo[int(len(foo)*x)]

为你的数据,你希望把它放在一个矩阵转置它,排序每一行,并获得每一行的中位数。

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

我认为​​会使你想要的数组,然后如果数字具有与Numpy相同的切片技术,你可以用'bar [:,n]'获得第n列。

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

我希望能帮到你。

1

将您的二维数组堆栈合并为一个三维数组d = Numeric.array([a, b, c]),然后在第三维上排序。之后,连续的2-D飞机将成为等级,因此您可以提取飞机的低,高,四分位数,百分位数或中位数。

+0

你能为我写这个吗?我真的很感激它。谢谢。 – steelymatt 2012-04-01 21:46:53

+0

@steelymatt我知道这是迟到,但我写了类似的东西 - [元素明智的三个二维数组的中位数](http://stackoverflow.com/a/13753506/206192) - 作为对另一个问题的答案。 – jozzas 2012-12-06 22:30:29