查找多个 NumPy 数组的中值

may*_*ven 5 python numpy

我有一个创建大约 50 个数组的 for 循环。数组的长度为 240。我试图找出计算数组每个元素的中值的最佳方法。本质上,我想获取循环中创建的每个数组的第一个元素,将它们放入列表中,然后找到中位数。然后对其他 239 个元素执行相同的操作。我正在考虑这样的事情

a = np.array([1,2,4,56,67,8,8,9]);

b = np.array([-1,-3,5,6,-7,-6,-8,0]);

c = np.array([1,2,3,4,5,6,7,8]);

d = []

d.append(a[0])

d.append(b[0])

d.append(c[0])

d
Out[62]: [1, -1, 1]

np.median(d)
Out[65]: 1.0
Run Code Online (Sandbox Code Playgroud)

Mar*_*yer 7

Numpy.median 将取您想要的任何轴上的中位数。因此,如果您可以将所有单独的数组放入一个数组中,您可以np.median()立即调用并获取它们:

\n
a = np.array([1,2,4,56,67,8,8,9]);\nb = np.array([-1,-3,5,6,-7,-6,-8,0]);\nc = np.array([1,2,3,4,5,6,7,8]);\n\nd = np.stack([a, b, c])\nnp.median(d, axis = 0)\n\n# array([1., 2., 4., 6., 5., 6., 7., 8.])\n
Run Code Online (Sandbox Code Playgroud)\n

当然,如果你可以直接制作50x240的数组而不需要循环,那就更好了。

\n

让 NumPy 执行此操作与使用 Python 循环相比,时机非常引人注目:

\n
l = [np.random.rand(240) for _ in range(50)]\n\ndef one(l):\n    return np.array(list(map(np.median, zip(*l))))\n\ndef two(l):\n    d = np.stack(l)\n    return np.median(d, axis = 0)\n\n> %timeit one(l)\n  17 ms \xc2\xb1 1.17 ms per loop (mean \xc2\xb1 std. dev. of 7 runs, 100 loops each)\n    \n> %timeit two(l)\n  456 \xc2\xb5s \xc2\xb1 39.5 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 1000 loops each\n
Run Code Online (Sandbox Code Playgroud)\n