本文整理汇总了Python中renderer.Renderer.j_multi方法的典型用法代码示例。如果您正苦于以下问题:Python Renderer.j_multi方法的具体用法?Python Renderer.j_multi怎么用?Python Renderer.j_multi使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类renderer.Renderer
的用法示例。
在下文中一共展示了Renderer.j_multi方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
# 需要导入模块: from renderer import Renderer [as 别名]
# 或者: from renderer.Renderer import j_multi [as 别名]
#.........这里部分代码省略.........
#Set reference image to unperturbed images
self.renderer.initjacobian(y_im, y_flow, y_m)
#Very inefficient... for now
for i in range(self.size()):
for j in range(i, self.size()):
hij = self.renderer.j(self, deltaX, i, j)
HTH[i,j] = hij/deltaX/deltaX
#Fill in the other triangle
HTH[j,i] = HTH[i,j]
self.refresh()
self.render()
return HTH
@timer_counter(stats.hessianrenderstc, stats.hessincsparse)
def _hessian_sparse_multi(self, y_im, y_flow, y_m, deltaX = 2):
HTH = np.zeros((self.size(),self.size()))
HTH_c = np.zeros((4, self.size(), self.size()))
for idx, e in enumerate(self.E_hessian):
self.refresh(idx, hess = True)
self.render()
#Set reference image to unperturbed images
self.renderer.initjacobian(y_im, y_flow, y_m)
ee = e.copy()
eeidx = self.E_hessian_idx[idx]
#print e
for i1 in range(2):
for j1 in range(2):
for i2 in range(2):
for j2 in range(2):
offset1 = i1+2*self.N*j1
offset2 = i2+2*self.N*j2
ee[:,0] = 2*e[:,0] + offset1
ee[:,1] = 2*e[:,1] + offset2
#Do the render
(h, h_hist, hcomp) = self.renderer.j_multi(self, deltaX, ee, idx, eeidx)
#Unpack the answers into the hessian matrix
h = h[h_hist > 0]
qidx = self.Q[np.squeeze(np.array(h_hist)),:]
for idx2 in range(len(qidx)):
q = qidx[idx2]
q1 = 2*q[0]+i1+2*self.N*j1
q2 = 2*q[1]+i2+2*self.N*j2
HTH[q1,q2] = h[0,idx2]/deltaX/deltaX
HTH[q2,q1] = HTH[q1,q2]
HTH_c[0,q1,q2] = hcomp[idx2,0]/deltaX/deltaX
HTH_c[0,q2,q1] = HTH_c[0,q1,q2]
HTH_c[1,q1,q2] = hcomp[idx2,1]/deltaX/deltaX
HTH_c[1,q2,q1] = HTH_c[1,q1,q2]
HTH_c[2,q1,q2] = hcomp[idx2,2]/deltaX/deltaX
HTH_c[2,q2,q1] = HTH_c[2,q1,q2]
HTH_c[3,q1,q2] = hcomp[idx2,3]/deltaX/deltaX
HTH_c[3,q2,q1] = HTH_c[3,q1,q2]
self.refresh()
self.render()
return HTH
def _hessian_sparse(self, y_im, y_flow, y_m, deltaX = 2):
HTH = np.zeros((self.size(),self.size()))
self.refresh()
self.render()
#Set reference image to unperturbed images
self.renderer.initjacobian(y_im, y_flow, y_m)
#Actually(!) here we only need compute this for vertices that are connected
#! this will speed things up significantly.
#! also don't need to do for cross terms between vx and vy
#This should become roughly linear... which makes the whole thing more
#doable.........for instance, this will chop the time for square1 geometry
#by a factor of ~4. Expect greater gains for larger geometries...
for i in range(self.size()):
for j in range(i, self.size()):
if self.J[i,j] == 1:
hij = self.renderer.j(self, deltaX, i, j)
else:
hij = 0.
HTH[i,j] = hij/deltaX/deltaX
#Fill in the other triangle
HTH[j,i] = HTH[i,j]
self.refresh()
self.render()
return HTH
def vertices(self):
return self.X[0:(2*self.N)].reshape((-1,2))
def velocities(self):
return self.X[(2*self.N):].reshape((-1,2))
def lengths(self):
#Compute initial edge lengths...
l = np.zeros((self.I,1))
d = np.dot(self.K.T,self.vertices().reshape((-1,1)))
for i in range(self.I):
di = d[2*i:2*i+2,0]
l[i,0] = np.sqrt(np.dot(di.T,di))
return l
def setforce(self,f):
self.renderer.force = f