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 个百分位的数组。非常感谢您的帮助!

4

3 回答 3

1

将一堆 2-D 数组合并为一个 3-D 数组,d = Numeric.array([a, b, c])然后按第三维排序。之后,连续的二维平面将按顺序排列,因此您可以提取低、高、四分位数、百分位数或中位数的平面。

于 2012-04-01T20:17:33.227 回答
0

好吧,我不精通数字,但我将从一个天真的解决方案开始,看看我们是否可以让它变得更好。

要获得 list foolet的第 30 个百分位数,请对列表x=0.3进行排序,然后在foo[int(len(foo)*x)]

对于你的数据,你想把它放在一个矩阵中,转置它,对每一行进行排序,并得到每一行的中位数。

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

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

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

我希望这对你有帮助。

于 2012-04-01T19:24:22.377 回答
0

将 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 个输入矩阵,因此中位数将是中间那个的中位数,即由 1 索引的那个,

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

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

于 2018-07-24T13:08:33.040 回答