def findWonkyVectors(x, y, dx, dy, tol=100): from PYME.Analysis.LMVis.visHelpers import genEdgeDB T = delaunay.Triangulation(x, y) edb = genEdgeDB(T) wonkyVecs = np.zeros(len(x)) #remove any shifts which are markedly different from their neighbours for i in range(len(x)): incidentEdges = T.edge_db[edb[i][0]] # d_x = np.diff(T.x[incidentEdges]) # d_y = np.diff(T.y[incidentEdges]) # # dist = (d_x**2 + d_y**2) # # di = np.mean(np.sqrt(dist)) neighb = incidentEdges.ravel() neighb = neighb[(neighb == i) < .5] if (abs(dx[i] - np.median(dx[neighb])) > tol) or (abs(dy[i] - np.median(dy[neighb])) > tol): wonkyVecs[i] = 1 return wonkyVecs > .5
def findWonkyVectors(x, y,dx,dy, tol=100): from PYME.Analysis.LMVis.visHelpers import genEdgeDB T = delaunay.Triangulation(x,y) edb = genEdgeDB(T) wonkyVecs = np.zeros(len(x)) #remove any shifts which are markedly different from their neighbours for i in range(len(x)): incidentEdges = T.edge_db[edb[i][0]] # d_x = np.diff(T.x[incidentEdges]) # d_y = np.diff(T.y[incidentEdges]) # # dist = (d_x**2 + d_y**2) # # di = np.mean(np.sqrt(dist)) neighb = incidentEdges.ravel() neighb = neighb[(neighb == i) < .5] if (abs(dx[i] - np.median(dx[neighb])) > tol) or (abs(dy[i] - np.median(dy[neighb])) > tol): wonkyVecs[i] = 1 return wonkyVecs > .5
def cluster(T): edb = genEdgeDB(T) nodeNum = -1*np.ones(T.x.shape) nodeInfo = np.iinfo('i').max*np.ones((len(T.x), 2)) curNode = 0 for i in range(len(T.x)): incidentEdges = T.edge_db[edb[i][0]] neighbourPoints = edb[i][1] dx = np.diff(T.x[incidentEdges]) dy = np.diff(T.y[incidentEdges]) dist = (dx**2 + dy**2) sI = argsort(dist)[::-1] #Do nearest neighbour - this MUST generate a new node iMin = np.argmin(np.sqrt(dist)) d = dist[iMin] n = neighbourPoints[iMin] nodeInfo[curNode, 1] = d nodeNum[i] = curNode if n < i: #have already visited other point nn = nodeNum[n] if nodeInfo[nn, 1] >= d: nodeNum[n] = curNode else: nnp = nn while nodeInfo[nn, 1] < d: #traverse upwards until distance is larger nnp = nn nn = nodeInfo[nn, 0] #parent nodeInfo[nnp, 0] = curNode nodeInfo[curNode, 0] = nn else: nodeInfo[curNode,0] = len(T.x)-1 #last node nodeNum[n] = curNode curNode += 1 return nodeNum, nodeInfo
def cluster(T): edb = genEdgeDB(T) nodeNum = -1 * np.ones(T.x.shape) nodeInfo = np.iinfo('i').max * np.ones((len(T.x), 2)) curNode = 0 for i in range(len(T.x)): incidentEdges = T.edge_db[edb[i][0]] neighbourPoints = edb[i][1] dx = np.diff(T.x[incidentEdges]) dy = np.diff(T.y[incidentEdges]) dist = (dx**2 + dy**2) sI = argsort(dist)[::-1] #Do nearest neighbour - this MUST generate a new node iMin = np.argmin(np.sqrt(dist)) d = dist[iMin] n = neighbourPoints[iMin] nodeInfo[curNode, 1] = d nodeNum[i] = curNode if n < i: #have already visited other point nn = nodeNum[n] if nodeInfo[nn, 1] >= d: nodeNum[n] = curNode else: nnp = nn while nodeInfo[ nn, 1] < d: #traverse upwards until distance is larger nnp = nn nn = nodeInfo[nn, 0] #parent nodeInfo[nnp, 0] = curNode nodeInfo[curNode, 0] = nn else: nodeInfo[curNode, 0] = len(T.x) - 1 #last node nodeNum[n] = curNode curNode += 1 return nodeNum, nodeInfo