小编and*_*s-h的帖子

ipython笔记本中的Unicode

我试图在ipython笔记本的matplotlib图中得到一个"度"符号(°).

我跑的时候

ax = plt.gca()
ax.set_xlabel("something at 55" + unicode("\xc2", errors='replace'))
ax.plot([0.,1.,], [0.,1.])
Run Code Online (Sandbox Code Playgroud)

我得到了一个情节,但不是学位标志,我有一个带问号的奇怪的黑色方块.当我尝试savefig将图形转换为PDF 时,也会发生这种情况.

如果我试着跑

ax = plt.gca()
ax.set_xlabel("something at 55°")
ax.plot([0.,1.,], [0.,1.])
Run Code Online (Sandbox Code Playgroud)

我收到错误(见下文).

知道我做错了什么吗?

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/usr/lib/python2.7/dist-packages/IPython/zmq/pylab/backend_inline.pyc in show(close)
    100     try:
    101         for figure_manager in Gcf.get_all_fig_managers():
--> 102             send_figure(figure_manager.canvas.figure)
    103     finally:
    104         show._to_draw = []

/usr/lib/python2.7/dist-packages/IPython/zmq/pylab/backend_inline.pyc in send_figure(fig)
    188     """
    189     fmt = InlineBackend.instance().figure_format
--> 190     data = print_figure(fig, fmt)
    191     # print_figure will return None if there's nothing to draw: …
Run Code Online (Sandbox Code Playgroud)

python unicode matplotlib ipython ipython-notebook

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

在scipy中卷积不均匀间隔的向量

我有一个测量频谱,即一维数组specspec.shape = (n, )。单个点对应于不均匀地间隔开的波长,存储在一维数组wlwl.shape = (n, )。现在,我需要使用预定义的FWHM的高斯函数对该频谱进行卷积。

如何使用numpy / scipy做到这一点?

目前,我有这个:

fwhm = .22
gaussian_window = scipy.signal.gaussian(spec.size, std=fwhm/2.3548201)
result = scipy.signal.fftconvolve(spec, gaussian_window)
Run Code Online (Sandbox Code Playgroud)

但是,这根本没有考虑输入数据的不均匀间距。

任何帮助是极大的赞赏 :)

numpy convolution scipy

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

Makefile中的条件:丢失分隔符错误?

我想按照http://sunsite.ualberta.ca/Documentation/Gnu/make-3.79/html_chapter/make_7.html#SEC72上的指南在Makefile中编写一些条件.但是,我得到错误Makefile:219: *** missing separator. Stop.,其中第219行是ifeq语句的行.这三条线以-$(FC)标签开头.

我正在使用GNU Make 3.81.任何帮助是极大的赞赏!

[...]

mod: $(MODBIN)

$(MODBIN): $(MODSRC)
ifeq($(FC),gfortran)
    -$(FC) $(MODFLAGS) -J$(INCPATH) $(INCLUDE) -c -o $@ $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS)
else ifeq($(FC),ifort)
    -$(FC) $(MODFLAGS) -module $(INCPATH) $(INCLUDE) -c -o $@ $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS)
else ifeq ($(FC),xlf2003_r)
    -$(FC) $(MODFLAGS) -qmoddir=$(INCPATH) $(INCLUDE) -c -o $@ $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS)
endif

io: $(IOBIN)

[...]
Run Code Online (Sandbox Code Playgroud)

编辑:按照@ sagar-sakre的建议,我改为:

[...]
mod: $(MODBIN)

$(MODBIN): $(MODSRC)
    ifeq($(B3dC),gfortran)
    -$(FC) $(MODFLAGS) -J$(INCPATH) $(INCLUDE) -c -o $@ $(subst $(BUILDPATH),$(MODPATH),$*).f90 …
Run Code Online (Sandbox Code Playgroud)

makefile

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

避免程序退出I/O错误

我有一个广泛使用shutil.copy2的Python脚本.因为我用它来通过网络复制文件,所以我的I/O错误太频繁,导致我的程序执行中止:

Traceback (most recent call last):
  File "run_model.py", line 46, in <module>
    main()
  File "run_model.py", line 41, in main
    tracerconfigfile=OPT.tracerconfig)
  File "ModelRun.py", line 517, in run
    self.copy_data()
  File "ModelRun.py", line 604, in copy_ecmwf_data
    shutil.copy2(remotefilename, localfilename)
  File "/usr/lib64/python2.6/shutil.py", line 99, in copy2
    copyfile(src, dst)
  File "/usr/lib64/python2.6/shutil.py", line 54, in copyfile
    copyfileobj(fsrc, fdst)
  File "/usr/lib64/python2.6/shutil.py", line 27, in copyfileobj
    buf = fsrc.read(length)
IOError: [Errno 5] Input/output error
Run Code Online (Sandbox Code Playgroud)

如何避免中止程序的执行并重新尝试复制过程?

我正在使用的代码已经通过检查filesize来检查文件是否完全被复制:

def check_file(file, size=0):
    if not os.path.exists(file):
        return False
    if (size != 0 and …
Run Code Online (Sandbox Code Playgroud)

python shutil

3
推荐指数
2
解决办法
2299
查看次数

cmap.set_bad()没有显示pcolor()的任何效果

我正试图在蒙面数组上使用pcolor.我希望蒙面元素以特殊颜色显示.我写了一些代码,但它似乎不起作用:

import matplotlib as mpl
import matplotlib.pyplot as plt

from numpy import linspace
from numpy.random import randn
from numpy.ma import masked_invalid

D = randn(12*72).reshape((12,72))
D[4,:] = nan
D[6,6] = nan

D = masked_invalid(D)

cmap = mpl.cm.bwr
c    map.set_bad('k', 1.)

xbin = linspace(0, 12, 13)
ybin = linspace(-90, 90, 73)

fig = plt.figure()
spl = fig.add_subplot(111)
pl = spl.pcolor(xbin, ybin, D.T, cmap=cmap, edgecolors='none',
                vmin=-5, vmax=5)
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib

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

multiprocessing.Pool在Linux/Python2.7上的terminate()之后产生新的childern?

我有一个可执行文件,我需要经常运行,具有不同的参数.为此,我使用多处理模块编写了一个小型Python(2.7)包装器,遵循此处给出的模式.

我的代码看起来像这样:

try:
     logging.info("starting pool runs")
     pool.map(run_nlin, params)
     pool.close()
 except KeyboardInterrupt:
     logging.info("^C pressed")
     pool.terminate()
 except Exception, e:
     logging.info("exception caught: ", e)
     pool.terminate()
 finally:
     time.sleep(5)
     pool.join()
     logging.info("done")
Run Code Online (Sandbox Code Playgroud)

我的工作人员在这里:

class KeyboardInterruptError(Exception): pass

def run_nlin((path_config, path_log, path_nlin, update_method)):
    try:
        with open(path_log, "w") as log_:
            cmdline = [path_nlin, path_config]
            if update_method:
                cmdline += [update_method, ]
            sp.call(cmdline, stdout=log_, stderr=log_)
    except KeyboardInterrupt:
        time.sleep(5)
        raise KeyboardInterruptError()
    except:
        raise
Run Code Online (Sandbox Code Playgroud)

path_config是二进制程序的配置文件的路径; 例如,运行程序的日期.

当我启动包装器时,一切看起来都很好.但是,当我按下时^C,包装器脚本似乎numproc在终止之前从池中启动了其他进程.举个例子,当我在1-10天启动脚本时,我可以在ps aux输出中看到二进制程序的两个实例正在运行(通常是第1天和第3天).现在,当我按下^C,包装器脚本退出时,第1天和第3天的二进制程序消失了,但是有新的二进制程序在第5天和第7天运行.

所以对我来说,似乎在最终死亡之前Pool启动另一个numproc …

python linux subprocess multiprocessing

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

如何将stl向量传递给一个带有const [](c ++)的函数

我有一个3d stl矢量,

vector<vector<vector<double> > > mdata;
Run Code Online (Sandbox Code Playgroud)

我也有一个功能

myfun(const double ya[]);
Run Code Online (Sandbox Code Playgroud)

更准确地说,它是GNU科学图书馆的一个功能,

gsl_spline_init(gsl_spline * spline, const double xa[], const double ya[], size_t size);
Run Code Online (Sandbox Code Playgroud)

但这与我的问题无关.

所以现在我想将数据的"最后"维度传递给myfun.我一直在尝试这个:

for (int s = 0; s < msize; s++) {
    accelerators = new gsl_interp_accel*[msize];
    splines = new gsl_spline*[msize];
    for (int i = 0; i < msize; i++) {
        accelerators[i] = gsl_interp_accel_alloc();
        splines[i] = gsl_spline_alloc(gsl_interp_cspline_periodic, msize+1);
        gsl_spline_init(splines[i], &(*mgrid.begin()), &(*mdata[s][i].begin()), msize+1);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是编译器(g ++,64bit,Ubuntu)抱怨道:

在成员函数" std::vector<std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >, std::allocator<std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, …

c++ const function vector

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

掩盖立方体的功能

我想绘制来自全局多维数据集的数据,但仅用于国家列表.所以我根据国家的"边界框"选择一个子立方体.

到现在为止还挺好.我正在寻找的是一种简单的方法来掩盖多维数据集的所有点,这些点不属于我的任何国家(表示为特征),因此只有那些位于我的任何特征内的立方体点被绘制.

非常感谢任何想法=)

cartopy python-iris

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

如何在docutils html模板中包含%符号

我想使用自己的模板生成带有rst2html的HTML页面.这些模板包含许多%的符号,例如

<TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
Run Code Online (Sandbox Code Playgroud)

现在,当我使用命令调用rst2html时

rst2html --template=layout2.tpl rst/index.rst > index.html
Run Code Online (Sandbox Code Playgroud)

我收到了错误

ValueError:索引827处不支持的格式字符'"'(0x22)

我发现问题是rst2html认为%"是一个占位符.

我已经尝试过逃避模板中的%,比如

<TABLE border="0" cellpadding="0" cellspacing="0" width="100\%">
Run Code Online (Sandbox Code Playgroud)

但这不起作用,错误是一样的.

所以我的问题是如何解决这个问题.任何帮助是极大的赞赏!

python

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

使用指针从函数中获取值(c ++)

我有一个函数来计算几个不同的值:

int ASPfile::get_dimensions(int* Lat, int* Lon, 
        vector<double>* Latgrid, vector<double>* Longrid) {

    _latsize = get_latsize();
    _lonsize = get_lonsize();

    Lat = &_latsize;
    Lon = &_lonsize;

    latgrid = read_latgrid();
    longrid = read_longrid();

    *Latgrid = latgrid;
    *Longrid = longrid;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该函数调用如下:

int* Latsize = NULL;
int* Lonsize = NULL;
vector<double>* Latgrid = NULL;
vector<double>* Longrid = NULL;
int res = asp->get_dimensions(Latsize,Lonsize,Latgrid,Longrid);
Run Code Online (Sandbox Code Playgroud)

然后,我尝试访问如下值:

cout << (*Szagrid)[4];
Run Code Online (Sandbox Code Playgroud)

或者像这样

cout << Szagrid->at(4);
Run Code Online (Sandbox Code Playgroud)

该程序编译时没有任何警告.但是,当我尝试访问get_dimensions()应该"填充"的指针时,valgrind会向我显示以下内容:

==10531== Invalid read of size 8
==10531==    at 0x633D5DA: std::vector<double, std::allocator<double> >::operator=(std::vector<double, …
Run Code Online (Sandbox Code Playgroud)

c++ pointers function

0
推荐指数
2
解决办法
625
查看次数