小编Dbr*_*cks的帖子

np.nonzero的Python/Cython/Numpy优化

我有一段代码,我正在尝试优化.大多数代码执行时间cdef np.ndarray index = np.argwhere(array==1) 取决于Where数组是numpy是512x512,512 numpy数组的零和1.有关加速这个的任何想法?使用Python 2.7,Numpy 1.8.1

球形度函数

def sphericity(self,array):

    #Pass an mask array (1's are marked, 0's ignored)
    cdef np.ndarray index = np.argwhere(array==1)
    cdef int xSize,ySize,zSize
    xSize,ySize,zSize=array.shape

    cdef int sa,vol,voxelIndex,x,y,z,neighbors,xDiff,yDiff,zDiff,x1,y1,z1
    cdef float onethird,twothirds,sp
    sa=vol=0 #keep running tally of volume and surface area
    #cdef int nonZeroCount = (array != 0).sum() #Replaces np.count_nonzero(array) for speed
    for voxelIndex in range(np.count_nonzero(array)):
    #for voxelIndex in range(nonZeroCount):
        x=index[voxelIndex,0]
        y=index[voxelIndex,1]
        z=index[voxelIndex,2]
        #print x,y,z,array[x,y,z]
        neighbors=0
        vol+=1

        for xDiff in [-1,0,1]:
            for yDiff in [-1,0,1]: …
Run Code Online (Sandbox Code Playgroud)

python numpy cython

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

标签 统计

cython ×1

numpy ×1

python ×1