小编Hua*_*ang的帖子

如何有效地计算运行中位数

我借用了一些代码,试图实现一个函数来计算大量数据的运行中位数。当前的对我来说太慢了(棘手的部分是我需要从正在运行的框中排除所有零)。下面是代码:

from itertools import islice
from collections import deque
from bisect import bisect_left,insort

def median(s):
    sp = [nz for nz in s if nz!=0]
    print sp
    Mnow = len(sp)
    if Mnow == 0:
        return 0
    else:
        return np.median(sp)

def RunningMedian(seq, M):
    seq = iter(seq)
    s = []

    # Set up list s (to be sorted) and load deque with first window of seq
    s = [item for item in islice(seq,M)]
    d = deque(s)

    # Sort it in increasing …
Run Code Online (Sandbox Code Playgroud)

python numpy slice median

4
推荐指数
2
解决办法
1万
查看次数

如何为百万元素加速Python嵌套循环

我尝试将两个对象(一个数据集包含大约五百万个元素,另一个包含大约200万个元素)配对,满足某些条件,然后将两个对象的信息保存到文件中.许多变量不参与配对计算,但它们对我的后续分析很重要,因此我需要跟踪这些变量并保存它们.如果有办法对整个分析进行矢量化,那么速度会快得多.在下面我以随机数为例:

import numpy as np
from astropy import units as u
from astropy.coordinates import SkyCoord
from PyAstronomy import pyasl


RA1 = np.random.uniform(0,360,500000)
DEC1 = np.random.uniform(-90,90,500000)
d = np.random.uniform(55,2000,500000)
z = np.random.uniform(0.05,0.2,500000)
e = np.random.uniform(0.05,1.0,500000)
s = np.random.uniform(0.05,5.0,500000)
RA2 = np.random.uniform(0,360,2000000)
DEC2 = np.random.uniform(-90,90,2000000)
n = np.random.randint(10,10000,2000000)
m = np.random.randint(10,10000,2000000)

f = open('results.txt','a')
for i in range(len(RA1)):
    if i % 50000 == 0:
        print i
    ra1 = RA1[i]
    dec1 = DEC1[i]
    c1 = SkyCoord(ra=ra1*u.degree, dec=dec1*u.degree)
    for j in range(len(RA2)):
        ra2 = …
Run Code Online (Sandbox Code Playgroud)

python loops numpy vector astropy

2
推荐指数
1
解决办法
3218
查看次数

具有不同标记大小的 Python 错误栏

我使用 pythonerrorbar绘制了一个图,但是参数markersize只能是标量而不是数组,这意味着所有数据点都具有相同的标记大小。我想知道如何markersize为不同的数据点分配不同的值?

ax.errorbar(x,y,xerr=[xlow,xup],yerr=[ylow,yup],color='r',ls='None',marker='o',markersize=5.)
Run Code Online (Sandbox Code Playgroud)

如果我将标记大小创建为5.0*y,我该如何使其工作?

python marker errorbar

2
推荐指数
1
解决办法
2万
查看次数

运行或滑动中位数,平均值和标准差

我试图计算一个大数组的运行中位数,平均值和标准.我知道如何计算运行平均值如下:

def running_mean(x, N):
    cumsum = np.cumsum(np.insert(x, 0, 0))
    return (cumsum[N:] - cumsum[:-N]) / float(N)
Run Code Online (Sandbox Code Playgroud)

这非常有效.但我不太明白为什么(cumsum[N:] - cumsum[:-N]) / float(N)可以给出平均值(我从其他人那里借来的).

我试图添加另一个返回句来计算中位数,但它没有做我想要的.

return (cumsum[N:] - cumsum[:-N]) / float(N), np.median(cumsum[N:] - cumsum[:-N])
Run Code Online (Sandbox Code Playgroud)

有没有人提供一些提示来解决这个问题?非常感谢你.

张焕安

python numpy mean median

1
推荐指数
1
解决办法
1120
查看次数

AstroPy SkyCoord极其缓慢,如何重新启用呢?

我正在使用AstroPy SkyCoord从赤道坐标到数百万个数据的银河坐标转换,它非常慢.任何人都有想加快速度,否则需要永远运行整个数据集.代码如下:

from astropy import units as u
from astropy.coordinates import SkyCoord
import numpy as np

ra1 = np.loadtxt('data.txt',usecols=(0,))
dec1 = np.loadtxt('data.txt',usecols=(1,))
size = len(ra1)
for i in range(size):
    ra = ra1[i]
    dec = dec1[i]
    c = SkyCoord(ra*u.degree, dec*u.degree)
    cc = c.galactic
    b = cc.b.degree
    l = cc.l.degree
Run Code Online (Sandbox Code Playgroud)

python data-conversion coordinates astropy

1
推荐指数
1
解决办法
659
查看次数

更改Python直方图的图例格式

我在同一张图中标注了两个不同的直方图,如下图。但是,两个直方图的图例采用方框的格式。我尝试了各种方法将框更改为行,但都不起作用。我想知道如何实现这样的功能?在此处输入图片说明

python matplotlib legend

1
推荐指数
1
解决办法
2287
查看次数

在每个整数的开头添加0

我有很多文件(大约400,000),其标识是一个六位数字.但如果数字小于6位,那么我们在数字的开头加0.例如,如果文件标识为25,则文件名为000025.txt.我想知道如何检测一个数字的位数以及如何在数字的开头添加正确的0的数字.部分代码如下:

import numpy as np
fake_id = np.random.randint(0,400000,400000)
id_change = fake_id[fake_id < 100000]
#### so for fake_id < 100000, we need to find out how many digits of the id, and then we can add the correct number of zeros at the beginning.
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

python numpy digit

0
推荐指数
1
解决办法
71
查看次数

查找其中包含 95% 数据的 numpy 数组的边缘

我有一个包含数万个元素的 numpy 数组。我想找到关键元素,95% 的数据都属于这些元素。例如,

import numpy as np
a = np.linspace(1,200,200)
Run Code Online (Sandbox Code Playgroud)

那么95%的数据落在其中的两个元素是5和195。numpy函数percentile只返回一个值,这不是我想要的。有人知道有什么模块可以做到这一点吗?

python arrays numpy percentage

-1
推荐指数
1
解决办法
1665
查看次数