相关疑难解决方法(0)

为什么在导入numpy后多处理只使用一个核心?

我不确定这是否更像是一个操作系统问题,但我想我会问这里,以防任何人从Python的结尾有一些见解.

我一直在尝试使用一个CPU密集型for循环joblib,但是我发现不是将每个工作进程分配给不同的核心,我最终将它们全部分配到同一个核心而没有性能提升.

这是一个非常简单的例子......

from joblib import Parallel,delayed
import numpy as np

def testfunc(data):
    # some very boneheaded CPU work
    for nn in xrange(1000):
        for ii in data[0,:]:
            for jj in data[1,:]:
                ii*jj

def run(niter=10):
    data = (np.random.randn(2,100) for ii in xrange(niter))
    pool = Parallel(n_jobs=-1,verbose=1,pre_dispatch='all')
    results = pool(delayed(testfunc)(dd) for dd in data)

if __name__ == '__main__':
    run()
Run Code Online (Sandbox Code Playgroud)

...这是我在htop脚本运行时看到的内容:

HTOP

我在一台4核的笔记本电脑上运行Ubuntu 12.10(3.5.0-26).显然joblib.Parallel是为不同的工作者生成单独的进程,但有没有办法让这些进程在不同的内核上执行?

python linux numpy multiprocessing blas

121
推荐指数
3
解决办法
3万
查看次数

使用 FORTRAN 排序的 Numpy 数组到 ctypes

是否有一种高性能方法可以将 numpy 数组转换为 FORTRAN 有序 ctypes 数组,理想情况下不需要副本,并且不会触发与步幅相关的问题?

\n
import numpy as np\n\n# Sample data\nn = 10000\nA = np.zeros((n,n), dtype=np.int8)\nA[0,1] = 1\n\ndef slow_conversion(A):\n    return np.ctypeslib.as_ctypes(np.ascontiguousarray(A.T))\n\nassert slow_conversion(A)[1][0] == 1\n
Run Code Online (Sandbox Code Playgroud)\n

仅调用as_ctypes的性能分析:

\n
%%timeit\nnp.ctypeslib.as_ctypes(A)\n
Run Code Online (Sandbox Code Playgroud)\n

3.35 \xc2\xb5s \xc2\xb1 每个循环 10.5 ns(意味着 \xc2\xb1 标准偏差 7 次运行,每次 100000 次循环)

\n

所提供的(慢速)转换的性能分析

\n
%%timeit\nslow_conversion(A)\n
Run Code Online (Sandbox Code Playgroud)\n

206 ms \xc2\xb1 每个循环 10.4 ms(平均 \xc2\xb1 标准偏差 7 次运行,每次 1 次循环)

\n

理想的结果是获得与调用类似的性能as_ctypes

\n

python ctypes numpy

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

用python3安装f2py

我需要在Python中调用Fortran模块中的例程.我用f2py和做了python2.7.它工作得很好.

现在,我必须使用它,python3f2py似乎不兼容python3.

我看到有些人使用的是一个名为的版本f2py3,但它既pip不是通过macports也不是通过macports(我使用的是Mac).此外,python3 + numpy + f2py似乎已经集成在Fedora中.

有没有人设法在Mac上使用f2py3(或等效)python3?如果没有,您建议将Fortran库与哪些替代解决方案相关联python3

python fortran f2py python-3.x osx-mavericks

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

为什么我的Fortran代码用f2py包含这么多内存?

我试图计算大约十万点之间的所有距离.我有以下代码用Fortran编写并使用以下代码编译f2py:

C         1         2         3         4         5         6         7
C123456789012345678901234567890123456789012345678901234567890123456789012
        subroutine distances(coor,dist,n)
        double precision coor(n,3),dist(n,n)
        integer n
        double precision x1,y1,z1,x2,y2,z2,diff2

cf2py intent(in) :: coor,dist
cf2py intent(in,out):: dist
cf2py intent(hide)::n
cf2py intent(hide)::x1,y1,z1,x2,y2,z2,diff2

        do 200,i=1,n-1
            x1=coor(i,1)
            y1=coor(i,2)
            z1=coor(i,3)
            do 100,j=i+1,n
                x2=coor(j,1)
                y2=coor(j,2)
                z2=coor(j,3)
                diff2=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2)
                dist(i,j)=sqrt(diff2)
  100       continue
  200   continue

        end
Run Code Online (Sandbox Code Playgroud)

我正在使用以下python代码编译fortran代码setup_collision.py:

# System imports
from distutils.core import *
from distutils      import sysconfig

# Third-party modules
import numpy
from numpy.distutils.core import Extension, setup

# Obtain the numpy include directory. …
Run Code Online (Sandbox Code Playgroud)

python fortran memory-management out-of-memory f2py

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