コード例 #1
0
    def unweightedCalc(self):
        """Performs unweighted k-function."""

        #### Attribute Shortcuts ####
        ssdo = self.ssdo
        reduce = self.reduce
        simulate = self.simulate
        ripley = self.ripley
        if reduce:
            studyArea2Use = self.reduceArea
        else:
            studyArea2Use = self.studyArea

        self.ld = COLL.defaultdict(float)
        if self.permutations:
            self.ldMin = COLL.defaultdict(float)
            self.ldMax = COLL.defaultdict(float)
            for order in self.cutoffOrder:
                self.ldMin[order] = 99999999999.

        permsPlus = self.permutations + 1
        for perm in xrange(0, permsPlus):

            #### Permutation Progressor ####
            pmsg = ARCPY.GetIDMessage(84184)
            progressMessage = pmsg.format(perm, permsPlus)
            ARCPY.SetProgressor("default", progressMessage)

            #### Permutate the XY ####
            if perm != 0:
                self.permutateTable()

            gaSearch = GAPY.ga_nsearch(self.kTable)
            gaSearch.init_nearest(self.stepMax, 0, "euclidean")
            N = len(self.kTable)

            numIDs = len(self.ids) 
            kij = COLL.defaultdict(float)
            for i in xrange(N):
                row = self.kTable[i]
                id0 = row[0]
                if id0 in self.ids:
                    x0,y0 = row[1]
                    gaSearch.search_by_idx(i)
                    for nh in gaSearch:
                        neighInfo = self.kTable[nh.idx]
                        nhID = neighInfo[0]
                        x1,y1 = neighInfo[1]
                        dist = WU.euclideanDistance(x0,x1,y0,y1)
                        if ripley:
                            value = self.returnRipley(id0, dist)
                        else:
                            value = 1.0
                        for order in self.reverseOrder:
                            cutoff = self.cutoffs[order]
                            if dist > cutoff:
                                break
                            kij[order] += value

            ARCPY.SetProgressorPosition()

            #### Calculate Stats USing Dictionaries ####
            weightSumVal = numIDs * (numIDs - 1.0)
            denom = NUM.pi * weightSumVal
            for order in self.cutoffOrder:
                res = kij[order]
                numer = res * studyArea2Use
                permResult = NUM.sqrt( (numer/denom) )
                if perm:
                    self.ldMin[order] = min(self.ldMin[order], 
                                            permResult)
                    self.ldMax[order] = max(self.ldMax[order], 
                                            permResult)
                else:
                    self.ld[order] = permResult
コード例 #2
0
    def weightedCalc(self):
        """Performs weighted k-function."""

        #### Attribute Shortcuts ####
        ssdo = self.ssdo
        reduce = self.reduce
        simulate = self.simulate
        ripley = self.ripley
        numIDs = len(self.ids) 
        if reduce:
            studyArea2Use = self.reduceArea
        else:
            studyArea2Use = self.studyArea
        if simulate:
            simOrder = []
            for simKey, origID in self.simDict.iteritems():
                simOrder.append(self.weightDict[origID])

        self.ld = COLL.defaultdict(float)
        if self.permutations:
            self.ldMin = COLL.defaultdict(float)
            self.ldMax = COLL.defaultdict(float)
            for order in self.cutoffOrder:
                self.ldMin[order] = 99999999999.

        permsPlus = self.permutations + 1
        for perm in xrange(0, permsPlus):

            #### Permutation Progressor ####
            pmsg = ARCPY.GetIDMessage(84184)
            progressMessage = pmsg.format(perm, permsPlus)
            ARCPY.SetProgressor("default", progressMessage)
            gaSearch = GAPY.ga_nsearch(self.kTable)
            gaSearch.init_nearest(self.stepMax, 0, "euclidean")
            N = len(self.kTable)

            #### Permutate Weights ####
            if perm:
                weights = RAND.permutation(weights)
            else:
                weights = self.weightVals
            if simulate:
                simWeights = NUM.take(self.weightVals, simOrder)

            #### Set Statistic Variables ####
            weightSumVal = 0.0
            kij = COLL.defaultdict(float)
            start = 0

            #### Loop Over Entire Table ####
            for i in xrange(N):
                row = self.kTable[i]
                id0 = row[0]

                #### Calculate For Inside IDs ####
                if id0 in self.ids:
                    x0,y0 = row[1]              
                    weightInd0 = self.weightDict[id0]
                    w0 = weights[weightInd0]

                    #### Weight Sum Resolution ####
                    weightSumVal += (NUM.sum(w0 * weights)) - w0**2.0
                    if simulate:
                        weightSumVal += (w0 * simWeights).sum()

                    #### Neighbors Within Largest Distance ####
                    gaSearch.search_by_idx(i)
                    for nh in gaSearch:
                        neighInfo = self.kTable[nh.idx]
                        id1 = neighInfo[0]
                        x1,y1 = neighInfo[1]

                        #### Input or Simulated Point ####
                        try:
                            weightInd1 = self.weightDict[id1]
                        except:
                            origID = self.simDict[id1]
                            weightInd1 = self.weightDict[origID]

                        #### Process Neighbor Pair ####
                        w1 = weights[weightInd1]
                        dist = WU.euclideanDistance(x0,x1,y0,y1)
                        if ripley:
                            value = self.returnRipley(id0, dist)
                        else:
                            value = 1.0
                        value = w0 * (w1 * value)

                        #### Add To Cutoffs ####
                        for order in self.reverseOrder:
                            cutoff = self.cutoffs[order]
                            if dist > cutoff:
                                break
                            kij[order] += value

            ARCPY.SetProgressorPosition()

            #### Calculate Stats USing Dictionaries ####
            denom = NUM.pi * weightSumVal
            for order in self.cutoffOrder:
                res = kij[order]
                numer = res * studyArea2Use
                permResult = NUM.sqrt( (numer/denom) )
                if perm:
                    self.ldMin[order] = min(self.ldMin[order], 
                                            permResult)
                    self.ldMax[order] = max(self.ldMax[order], 
                                            permResult)
                else:
                    self.ld[order] = permResult