Python 求多个NumPy数组的中值
我有一个for循环,可以创建大约50个数组。阵列的长度为240。我试图找出计算数组中每个元素中值的最佳方法。本质上,我想获取循环中创建的每个数组的第一个元素,将它们放入一个列表中,然后找到中间值。然后对其他239个元素执行相同的操作。我就是这么想的Python 求多个NumPy数组的中值,python,numpy,Python,Numpy,我有一个for循环,可以创建大约50个数组。阵列的长度为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 = 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
您可以这样做:
medians = [np.median([a[i],b[i],c[i]]) for i in range(len(a))]
Numpy.median将取任意轴上的中间值。因此,如果您可以将所有单个数组放入单个数组中,则可以调用并一次获取所有数组:
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 = np.stack([a, b, c])
np.median(d, axis = 0)
# array([1., 2., 4., 6., 5., 6., 7., 8.])
当然,如果您可以直接制作50x240阵列而不使用循环,那就更好了
与python循环相比,让NumPy这样做的时机非常紧迫:
l = [np.random.rand(240) for _ in range(50)]
def one(l):
return np.array(list(map(np.median, zip(*l))))
def two(l):
d = np.stack(l)
return np.median(d, axis = 0)
> %timeit one(l)
17 ms ± 1.17 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
> %timeit two(l)
456 µs ± 39.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each
您可以使用
zip
和map
来获取迭代器:
map(np.median, zip(a, b, c))
如果要将其作为numpy阵列,可以使用:
np.array(list(map(np.median, zip(a, b, c))))
输出:
数组([1,2,4,6,5,6,7,8.])