2012-04-01 205 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