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代码:
@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)
发布于 2018-05-28 14:46:41
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
https://stackoverflow.com/questions/-100001604
复制相似问题