用Python实现二维数组的sigma裁剪

2024-09-27 00:20:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的2D array,我想做sigma clipping,然后计算其中一个轴上的中值。在

  1. 有没有办法一步到位?

  2. 做sigma裁剪然后计算每列的中值是我唯一能做的方法吗?sigma裁剪将改变数组的长度)。我的数组非常大,这似乎有点低效(我使用的典型数组将有shape = (29000, 2000))。

示例

x= random.random(9000).reshape(1000, 9)
v= []
for i in range(x.shape[0]):
    y= sigmaclip(x[i], 1.5, 1.5)
    m= median(y[0])
    v.append(m)

Tags: 方法in示例forrangerandom数组array
1条回答
网友
1楼 · 发布于 2024-09-27 00:20:02

我猜你在用this scipy functionsigmaclip函数本身是迭代的,但是for循环可能是最慢的(尤其是当您沿着最长的轴迭代时)。您可以使用数组操作更快(尽管可能不简单),可能是这样的:

top     = 1.5
bot     = 1.5
xm      = ma.masked_array(x)

while 1:
    mn  = ma.mean(xm, axis=1)
    sig = ma.std(xm, axis=1)
    mask= (((xm.T <= (mn - bot*sig)) | (xm.T >= (mn + top*sig)))).T

    if (mask == xm.mask).all():
        break
    xm.mask     = mask

med     = ma.median(xm, axis = 1)

相关问题 更多 >

    热门问题