Python 数组的元素中位数和百分位数
我正在使用数字Python。不幸的是,NumPy不是一个选项。如果我有多个阵列,例如: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])) 然后看一个更一般的情况:给定
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我知道已经晚了,但我写了类似的东西——作为对另一个问题的回答。