IPython%timeit magic命令可以很好地测量运行某些Python代码所需的时间.现在,我想在Python脚本中使用类似的东西.我知道timeit模块,但它有几个缺点,例如,如何自适应地选择运行次数?即默认代码
import timeit
t=timeit.Timer("code(f)", "from __main__ import code,f")
t.timeit()
Run Code Online (Sandbox Code Playgroud)
运行代码数百万次.%timeit IPyhton magic命令会自动执行此操作.我建议我可以使用MATLAB代码 http://www.mathworks.com/matlabcentral/fileexchange/18798
自动完成所有工作(并且还告诉函数的开销是否很大).
如何从Python脚本中调用%timeit magic(或者可能有更好的时序解决方案)?
是否有一种简单的方法可以在组织模式中插入当前时间(如TIME:[2012-07-02 Mon 16:44])?在手册中有很多东西(时钟,截止日期,时间表),但大多数都需要手动输入时间.
我正在使用Enthought Python Distribution(7.2,64位).它没有wxPython(这非常重要).但是,wxPython-2.9似乎支持64位Cocoa接口,所以我试了一下.实际上,这一切都很顺利:命令
python build-wxpython.py --osx_cocoa --mac_framework --install
Run Code Online (Sandbox Code Playgroud)
成功编译,甚至进入EPD网站包.但是,一个简单的wxPython代码
import wx
wx.App()
Run Code Online (Sandbox Code Playgroud)
失败,出现以下错误:
This program needs access to the screen.
Please run with a Framework build of python, and only when you are
logged in on the main display of your Mac.
Run Code Online (Sandbox Code Playgroud)
你能给我一些如何治愈的建议吗?EPD显然是一个Python框架(即,查看/Library/Frameworks/EPD64.framework和/Library/Frameworks/Python.framework让我信服它)但是这个wxPython构建并不知道.wxPython的版本是2.9.3.1
我在Emacs的org-mode中编写了很多文件,非常棒.我开始在组织模式下写科学论文.但是:这篇文章有几位作者.
我用了
#+AUTHOR: Author 1, Author 2
Run Code Online (Sandbox Code Playgroud)
它正确地输出到Latex.
但是,我需要作者的电子邮件和机构.我可以直接在组织模式下进行吗?
命令
#+EMAIL: email1, email2
Run Code Online (Sandbox Code Playgroud)
挑选最后一个.
我有以下问题:Fortran90 +中的allocate/deallocate语句的实际开销是多少?即,在循环内部分配了几个中型数组,如
do i = 1, 1000
allocate(tmp(20))
tmp(1:20) = 1d0
call foo(tmp)
deallocate(tmp)
end do
Run Code Online (Sandbox Code Playgroud)
在这种情况下,是否值得根据最大大小分配单个工作数组?
我花了将近一个小时来搜索解决方案,但numpy.distutils的文档非常稀疏.
我有一个f2py包装的模块.它基本上由3个文件组成:
a.f90
a.pyf
lib.a <- this is a static library that contains most of the computational code
Run Code Online (Sandbox Code Playgroud)
使用以下shell-script命令很好地编译该模块.
f2py --build-dir temp -c a.pyf a.f90 lib.a --fcompiler=gnu95
--fcompiler-flags="Zillions of compiler options"
Run Code Online (Sandbox Code Playgroud)
结果,我有python模块a.so(名称在.pyf文件中指定).
我如何使用numpy.distutils(或其他一些面向python的构建工具)来做到这一点?一个不太重要的问题是,我是否还可以包含lib.a的依赖(并在必要时重建它?)
一个简单的问题:我有一个函数f(t),它应该在[0,1]的某个点上有一些尖峰.一个自然的想法是使用此功能的自适应采样来获得一个很好的"自适应"图.我怎么能在Python + matplotlib + numpy +中以快速的方式做到这一点?我可以为[0,1]上的任何t计算f(t).
似乎Mathematica有这个选项,Python有一个吗?
我最近发现了很好的Octopress和Jekyll框架,我将把我的主页从wordpress切换到octopress(这是很好的记录).但是,我很想在octopress上添加几个插件.例如,生成参考书目的那个.Jekyll有几个插件用于执行此操作(例如,https://github.com/inukshuk/jekyll-scholar)
但是,我无法使它成为一个章鱼网站的功能;
我试着按照安装说明,而不是jekyll插件目录使用octopress插件目录; 它没有成功.
任何人都可以向我提供一般说明如何为简单的章鱼博客安装jekyll插件(jekyll-scholar的例子就足够了).
我正在链接一个外部库(通过wierd进程,mpicc + Cython +等),但我有一个奇怪的链接过程行为.
有两个.o文件,libpetsc4py.o和PETSc.o它们被链接到一个.so文件PETSc.so
一个包含一个未定义的符号 __pyx_tp_new_8petsc4py_5PETSc_Object
[zheltkov@compiler-2 src]$ nm libpetsc4py.o | grep __pyx_tp_new_8petsc4py_5PETSc_Object
U __pyx_tp_new_8petsc4py_5PETSc_Object
Run Code Online (Sandbox Code Playgroud)
它在另一个.o文件中定义:
[zheltkov@compiler-2 src]$ nm PETSc.o | grep __pyx_tp_new_8petsc4py_5PETSc_Object
00000000001b92f0 t __pyx_tp_new_8petsc4py_5PETSc_Object
Run Code Online (Sandbox Code Playgroud)
然后,完成链接(编译行很奇怪,对不起)
mpicc -pthread -fPIC -wd1572 -g -shared -fno-strict-aliasing -g -O2 -DNDEBUG -O2 -g
build/temp.linux-x86_64-2.7/arch-linux2-c-debug/src/PETSc.o build/temp.linux-x86_64-
2.7/arch- linux2-c-debug/src/libpetsc4py.o -L/home/users/zheltkov/tmp/petsc-3.3/arch
-linux2-c-debug/lib -L/home/users/zheltkov/ivan/soft/epd7.2/lib
-Wl,rpath,/home/users/zheltkov/tmp/petsc-3.3/arch-linux2-c-debug/lib
-Wl,-rpath,/home/users/zheltkov/ivan/soft/epd7.2/lib -lpetsc -lpython2.7 -o
build/lib.linux-x86_64-2.7/petsc4py/lib/a rch-linux2-c-debug/PETSc.so -lX11 -Wl,
-rpath,/home/users/zheltkov/tmp/petsc-3.3/arch-linux2-c-debug/lib
-L/home/users/zheltkov/tmp/petsc-3.3/arch-linux2-c-debug/lib -lfftw3_mpi -lfftw3 -lHYPRE
-Wl,-rpath,/opt/intel/impi/4.1.0.030/intel64/lib
-L/opt/intel/impi/4.1.0.030/intel64/lib -Wl,
-rpath,/opt/intel/composer_xe_2013.2.146/mkl/lib/intel64
-L/opt/intel/composer_xe_2013.2.146/mkl/lib/intel64
-Wl,-rpath,/opt/intel/composer_xe_2013.2.146/compiler/lib/intel64
-L/opt/intel/composer_xe_2013.2.146/compiler/lib/intel64 -Wl,
-rpath,/usr/lib/gcc/x86_64-redhat-linux/4.4.6 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.6
-Wl,- rpath,/mnt/data/users/dm4/vol9/zheltkov/tmp/petsc-3.3/-Xlinker -lmpigc4
-Wl,-rpath,/opt/intel/mpi-rt/4.1 -lml -lpthread -Wl,-rpath,
/opt/intel/composer_xe_2013/mkl/lib/intel64
-L/opt/intel/composer_xe_2013/mkl/lib/intel64 …Run Code Online (Sandbox Code Playgroud) 我有以下问题.我们必须将回调函数传递给C代码.如果该函数是同一模块中的Cython函数,则情况非常简单
在Cython中:
def callme(int x):
c_callme(x, <int (*)(int)>&callbackme)
cdef int callbackme(int x):
print <int> x
return <int>x
Run Code Online (Sandbox Code Playgroud)
在C:
int c_callme(int x, int (*f)(int))
{
printf("---%d\n",x);
printf("--%d\n",f(x));
return x;
}
Run Code Online (Sandbox Code Playgroud)
问题如下:我们希望以最Pythonic的方式推广这个代码,以便它也可以接受python函数作为回调参数(当然,还需要一些额外的层),以及来自另一个模块的C/Cython函数.我想,对于来自单独模块的C/Cython函数,必须获取这些函数的地址(转换为long int?),对于Python函数,需要某个包装器
以下代码将数组的一部分乘以数字
def mul_by_num(a,b):
a[0:2] *= b
import numpy as np
a = np.ones(5,dtype=np.float64)
mul_by_num(a,1.0)
mul_by_num(a,1j) #Generates a warning (and casts to float!)
Run Code Online (Sandbox Code Playgroud)
第二个调用会生成警告
-c:2: ComplexWarning: Casting complex values to real discards the imaginary part
Run Code Online (Sandbox Code Playgroud)
问题是,在没有混淆dtypes的情况下,通过复数/实数乘以numpy数组的部分的最pythonic方法是什么?我真的不想从一开始就将数组转换为复数,但原则上该程序可以获得复杂的输入.
编辑:
我不关心复制整个阵列,把它复制到复杂的阵列; 但我想避免检查dtypes(即np.float32,np.float64,np.complex,np.int等)
我非常喜欢"魔术方法"的语法或者在Python中调用的任何语法,比如
class foo:
def __add__(self,other): #It can be called like c = a + b
pass
Run Code Online (Sandbox Code Playgroud)
电话
c = a + b
Run Code Online (Sandbox Code Playgroud)
然后被翻译成
a.__add__(b)
Run Code Online (Sandbox Code Playgroud)
是否有可能模仿"非魔法"功能的这种行为?在数值计算中,我需要Kronecker产品,并且渴望拥有"kron"功能
kron(a,b)
Run Code Online (Sandbox Code Playgroud)
实际上是
a.kron(b)?
Run Code Online (Sandbox Code Playgroud)
用例是:我有两个类似的类,比如,矩阵和向量,都有Kronecker产品.我想打电话给他们
a = matrix()
b = matrix()
c = kron(a,b)
a = vector()
b = vector()
c = kron(a,b)
Run Code Online (Sandbox Code Playgroud)
矩阵和向量类在一个.py文件中定义,因此共享公共命名空间.那么,实现上述功能的最佳(Pythonic?)方式是什么?可能的解决方案:
1)有一个kron()函数并进行类型检查
2)具有不同的名称空间
3)?