gpt4 book ai didi

python - 当我取数组列的中位数时,如何忽略零?

转载 作者:太空狗 更新时间:2023-10-29 20:39:40 26 4
gpt4 key购买 nike

我有一个简单的 numpy 数组。

array([[10,   0,  10,  0],
[ 1, 1, 0, 0]
[ 9, 9, 9, 0]
[ 0, 10, 1, 0]])

我想分别取这个数组每一列的中位数。

但是,在计算中位数时,我想在各个地方忽略一些 0 值。

更复杂的是,我想保留只有 0 条目的列的中位数为 0。以这种方式,这些列将充当一些占位符,使矩阵的维度保持不变。

numpy 文档没有任何参数可以满足我的需求(也许我被 R 中的许多开关宠坏了!)

numpy.median(a, axis=None, out=None, overwrite_input=False)[来源]

有人可以阐明一种符合 numpy 精神的有效方法吗?我可以破解它,但在那种情况下,我觉得我已经打败了使用 numpy 的初衷。

提前致谢。

最佳答案

Masked array 总是很方便,但是 slooooooow:

In [14]:

%timeit np.ma.median(y, axis=0).filled(0)
1000 loops, best of 3: 1.73 ms per loop
In [15]:

%%timeit
ans=np.apply_along_axis(lambda v: np.median(v[v!=0]), 0, x)
ans[np.isnan(ans)]=0.
1000 loops, best of 3: 402 µs per loop

In [16]:

ans=np.apply_along_axis(lambda v: np.median(v[v!=0]), 0, x)
ans[np.isnan(ans)]=0.; ans
Out[16]:
array([ 9., 9., 9., 0.])

np.nonzero 甚至更快:

In [25]:

%%timeit
ans=np.apply_along_axis(lambda v: np.median(v[np.nonzero(v)]), 0, x)
ans[np.isnan(ans)]=0.
1000 loops, best of 3: 384 µs per loop

关于python - 当我取数组列的中位数时,如何忽略零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22049140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com