首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >基准Cython代码?

基准Cython代码?
EN

Stack Overflow用户
提问于 2018-05-28 05:43:57
回答 1查看 0关注 0票数 0
代码语言:txt
复制
from scipy.interpolate import UnivariateSpline
import matplotlib.pyplot as plt
import pylab as pl
import random
import math
import time
cimport cython
import numpy as np
@cython.boundscheck(False)
@cython.wraparound(False)
def gaussian_2D_distribution(x,y,int mean_x,int mean_y,double sigma):
    #cdef double[:,:]f
    f = np.exp((-0.5*(np.square(x-mean_x) + np.square(y-mean_y))/sigma))/(sigma*np.sqrt(2*math.pi));
    return f

def Centroid2(x,y,f):
    temp_x = np.multiply(x,f)
    temp_y = np.multiply(y,f)
    X_c = (temp_x.sum()/f.sum());
    Y_c = -((temp_y.sum()/f.sum())+1);
    return(X_c,Y_c);

@cython.boundscheck(False)
@cython.wraparound(False)
def benchmark_func(int no_of_frames):
    cdef:
        int i
        double start
        double end
        #int shift[10000][2]
        double Centroid[10000][2]
 #---------------------------------------------Creating Matrices--------------------------------------------------------#
    start = time.time()
    a = np.arange(-50,50,1);
    x = np.matlib.repmat(a,100 ,1);
    y = x.transpose();
    f = np.zeros([no_of_frames,100,100])

    print "Done stage 1 ..."
#---------------------------------------Creating Gaussian Images------------------------------------------------------#
    shift = np.zeros([no_of_frames,2])
    shift[:,0] = 15
    shift[:,1] = 25

    for i in range(int (no_of_frames)):
        #shift[i][0] = random.randint(-50,50)
        #shift[i][1] = random.randint(-50,50)
        f[i,:,:] = gaussian_2D_distribution(x,y,shift[i][0],shift[i][1],0.1)
        f[i,:,:]= np.flip(f[i,:,:],0)

    print "Done stage 2 ..."
#---------------------------------------To find the centroid----------------------------------------------------------#

    #start = time.time()
    for i in range(int (no_of_frames)):
        Centroid[i][:] = Centroid2(x,y,f[i])
    end = time.time()

    #print Centroid[2]
    print(end - start),
    print "seconds"
    print "Done stage 3 ..."
    return Centroid

Python代码:

代码语言:txt
复制
@max911, find below the pure python code.

def gaussian_2D_distribution(x, y, mean_x, mean_y, sigma):
    f = np.exp((-0.5 * (np.square(x - mean_x) + np.square(y - mean_y)) / sigma)) / (sigma * np.sqrt(2 * math.pi))
    return f


def Centroid2(x, y, f):
    return ((np.multiply(x, f).sum() / f.sum()), -((np.multiply(y, f).sum() / f.sum()) + 1));


def benchmark_func(no_of_frames):
    start = time.time()
    a = np.arange(-50, 50, 1);
    x = np.matlib.repmat(a, 100, 1);
    y = x.transpose();
    print "Done stage 1 ..."
    # ----------------------------------------------Creating Gaussian Images--------------------------------------#

    shift = np.zeros([no_of_frames, 2])

    f = np.zeros([no_of_frames, 100, 100])
    shift[:,0] = 15
    shift[:,1] = 25
    for i in range(no_of_frames):
        #shift[i, 0] = random.randint(-50, 50)
        #shift[i, 1] = random.randint(-50, 50)
        f[i, :, :] = gaussian_2D_distribution(x, y, shift[i, 0], shift[i, 1], 0.1)
        f[i, :, :] = np.flip(f[i, :, :], 0)
    #print f[5,:,:]
    print "Done stage 2 ..."
    # -------------------------------------To find the centroid---------------------------------------------------#

    Centroid = np.zeros([no_of_frames, 2])

    #start = time.time()
    for i in range(no_of_frames):
        Centroid[i,:] = Centroid2(x, y, f[i])
    end = time.time()
    print(end - start),
    print "seconds"
    print "Done stage 3 ..."
    return Centroid, shift


no_of_frames = 1000
Centroid = np.zeros([no_of_frames, 2])
[Centroid, shift] = benchmark_func(no_of_frames)
EN

回答 1

Stack Overflow用户

发布于 2018-05-28 14:46:41

代码语言:txt
复制
from scipy.interpolate import UnivariateSpline
import matplotlib.pyplot as plt
import pylab as pl
import random
import math
import time
cimport cython
import numpy as np
cimport numpy as np
#------------------------------------------------------------------------------------------------------------#
@cython.boundscheck(False)
@cython.wraparound(False)
@cython.boundscheck(False)
cdef gaussian_2D_distribution(x,y, mean_x, mean_y, double sigma):
    f = np.exp((-0.5*(np.square(x-mean_x) + np.square(y-mean_y))/sigma))/(sigma*np.sqrt(2*math.pi));
    return f

cdef Centroid2(x,y,f):
    return(np.multiply(x,f).sum()/f.sum(),-((np.multiply(y,f).sum()/f.sum())+1))
#------------------------------------------------------------------------------------------------------------------------------#
DTYPE = np.intc
@cython.boundscheck(False)
@cython.wraparound(False)
@cython.boundscheck(False)
def benchmark_func(int no_of_frames):
    cdef:
        int i
        double start
        double end

    #---------------------------------------------Creating Matrices--------------------------------------------------------#
    start = time.time()
    a = np.arange(-50,50,1,dtype = DTYPE);
    x = np.matlib.repmat(a,100 ,1);
    y = x.transpose();
    f = np.zeros([no_of_frames,100,100],dtype = np.float64)

    print "Done stage 1 ..."
    #---------------------------------------Creating Gaussian Images------------------------------------------------------#
    shift = np.zeros((no_of_frames,2),dtype = DTYPE)
    Centroid = np.zeros((no_of_frames,2),dtype = DTYPE)
    #shift[:,0] = 15
    #shift[:,1] = 25

    for i in range(int (no_of_frames)):
        shift[i][0] = random.randint(-50,50)
        shift[i][1] = random.randint(-50,50)
        f[i,:,:] = gaussian_2D_distribution(x,y,(shift[i,0]),(shift[i,1]),(0.1))
        f[i,:,:]= np.flip(f[i,:,:],0)

    print "Done stage 2 ..."
    #---------------------------------------To find the centroid----------------------------------------------------------#

    #start = time.time()
    for i in range(int (no_of_frames)):
        Centroid[i][:] = Centroid2(x,x.transpose(),f[i])
    end = time.time()

    print "Done stage 3 ..."
    print(end - start),
    print "seconds"
    print shift[5][0],shift[5][1]
    return Centroid
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档