コード例 #1
0
ファイル: nussinov.py プロジェクト: UDC-GAC/polybench-python
    def kernel(self, seq: ndarray, table: ndarray):
        # def max_score(s1, s2):
        #     if s1 >= s2:
        #         return s1
        #     else:
        #         return s2
        #
        def match(b1, b2):
            return b1 + b2 == 3

        table_flattened = table.ravel()
        # scop begin
        for i in range(self.N):
            diag_i = np.arange(0, self.N - i - 1)
            diag_j = np.arange(i + 1, self.N)
            slice_W = slice(i, i + self.N * (self.N - i - 1), self.N + 1)
            slice_center = slice(i + 1, i + 1 + self.N * (self.N - i - 1),
                                 self.N + 1)
            slice_SW = slice(i + self.N, i + self.N * (self.N - i), self.N + 1)
            slice_S = slice(i + 1 + self.N, i + 1 + self.N * (self.N - i),
                            self.N + 1)
            table_flattened[slice_center] = np.maximum(
                table_flattened[slice_center], table_flattened[slice_W])
            table_flattened[slice_center] = np.maximum(
                table_flattened[slice_center], table_flattened[slice_S])
            if i > 0:
                table_flattened[slice_center] = np.maximum(
                    table_flattened[slice_center], table_flattened[slice_SW] +
                    match(seq[0:self.N - 1 - i], seq[i + 1:self.N]))
            else:
                table_flattened[slice_center] = np.maximum(
                    table_flattened[slice_center], table_flattened[slice_SW])
            if i < self.N - 1:
                table_flattened[slice_center] = np.maximum(
                    table_flattened[slice_center],
                    np.max(table[0:self.N - i - 1, i + 1:self.N], axis=0))
コード例 #2
0
def calculate_metrics(confusion_matrix: ndarray) -> tuple:
    tn, fp, fn, tp = confusion_matrix.ravel()
    accuracy = (tp + tn) / sum([tn, fp, fn, tp])
    recall = tp / (tp + fn)
    precision = tp / (tp + fp)
    return accuracy, recall, precision
コード例 #3
0
    def kernel(self, A: ndarray):
        # scop begin
        #        for t in range(0, self.TSTEPS - 1 +1):
        #            for i in range(1, self.N - 2 + 1):
        #                for j in range(1, self.N - 2 + 1):
        #                    A[i,j] = (A[i - 1,j - 1] + A[i - 1,j] + A[i - 1,j + 1]              # Dependences prevent vectorization: A[i,j-1] -> A[i,j]
        #                               + A[i,j - 1] + A[i,j] + A[i,j + 1]
        #                               + A[i + 1,j - 1] + A[i + 1,j] + A[i + 1,j + 1]) / 9.0
        A_flattened = A.ravel()
        self_N_1 = self.N - 1
        self_Nx2 = self.N * 2
        for t in range(self.TSTEPS):
            for i in range(1, self_N_1):

                end = i * self.N
                slice_NW = slice(i - 1, end - 1, self_N_1)
                slice_N = slice(i, end, self_N_1)
                slice_NE = slice(i + 1, end + 1, self_N_1)

                start = self.N + i
                end += self.N
                slice_W = slice(start - 1, end - 1, self_N_1)
                slice_center = slice(start, end, self_N_1)
                slice_E = slice(start + 1, end + 1, self_N_1)

                start += self.N
                end += self.N
                slice_SW = slice(start - 1, end - 1, self_N_1)
                slice_S = slice(start, end, self_N_1)
                slice_SE = slice(start + 1, end, self_N_1)

                A_flattened[slice_center] = (
                    A_flattened[slice_NW] + A_flattened[slice_N] +
                    A_flattened[slice_NE] + A_flattened[slice_W] +
                    A_flattened[slice_center] + A_flattened[slice_E] +
                    A_flattened[slice_SW] + A_flattened[slice_S] +
                    A_flattened[slice_SE]) / 9.0
# diagonal version
#                diag_i = np.arange(1,i+1)
#                diag_j = np.arange(i,0,-1)
#                A[diag_i,diag_j] = ( A[diag_i-1,diag_j-1] + A[diag_i-1,diag_j] + A[diag_i-1,diag_j+1]+ A[diag_i,diag_j-1] + A[diag_i,diag_j] + A[diag_i,diag_j+1] + A[diag_i+1,diag_j-1] + A[diag_i+1,diag_j] + A[diag_i+1,diag_j+1] ) / 9.0
# scalar version
#                for j in range( 1, i+1 ):
#                    A[j,i-j+1] = (A[j-1,i-j] + A[j-1,i-j+1] + A[j-1,i-j+2]
#                        + A[j,i-j] + A[j,i-j+1] + A[j,i-j+2]
#                        + A[j+1,i-j] + A[j+1,i-j+1] + A[j+1,i-j+2] ) / 9.0
            for i in range(2, self.N):
                start = self.N * i - 2
                end = self.N**2 - 3 * self.N + i + 1
                slice_NW = slice(start - 1, end - 1, self.N - 1)
                slice_N = slice(start, end, self.N - 1)
                slice_NE = slice(start + 1, end + 1, self.N - 1)

                start += self.N
                end += self.N
                slice_W = slice(start - 1, end - 1, self.N - 1)
                slice_center = slice(start, end, self.N - 1)
                slice_E = slice(start + 1, end + 1, self.N - 1)

                start += self.N
                end += self.N
                slice_SW = slice(start - 1, end - 1, self.N - 1)
                slice_S = slice(start, end, self.N - 1)
                slice_SE = slice(start + 1, end + 1, self.N - 1)
                A_flattened[slice_center] = (
                    A_flattened[slice_NW] + A_flattened[slice_N] +
                    A_flattened[slice_NE] + A_flattened[slice_W] +
                    A_flattened[slice_center] + A_flattened[slice_E] +
                    A_flattened[slice_SW] + A_flattened[slice_S] +
                    A_flattened[slice_SE]) / 9.0