Browse Source

[Feature] Add the gklearn.model_learning.dichotomous_permutation function.

v0.2.x
jajupmochi 4 years ago
parent
commit
325f51cb6f
1 changed files with 89 additions and 0 deletions
  1. +89
    -0
      gklearn/model_learning/parameters.py

+ 89
- 0
gklearn/model_learning/parameters.py View File

@@ -0,0 +1,89 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri May 21 12:18:02 2021

@author: ljia
"""

def dichotomous_permutation(arr, layer=0):
import math

# def seperate_arr(arr, new_arr):
# if (length % 2) == 0:
# half = int(length / 2)
# new_arr += [arr[half - 1], arr[half]]
# subarr1 = [arr[i] for i in range(1, half - 1)]
# else:
# half = math.floor(length / 2)
# new_arr.append(arr[half])
# subarr1 = [arr[i] for i in range(1, half)]
# subarr2 = [arr[i] for i in range(half + 1, length - 1)]
# subarrs = [subarr1, subarr2]
# return subarrs


if layer == 0:
length = len(arr)
if length <= 2:
return arr

new_arr = [arr[0], arr[-1]]
if (length % 2) == 0:
half = int(length / 2)
new_arr += [arr[half - 1], arr[half]]
subarr1 = [arr[i] for i in range(1, half - 1)]
else:
half = math.floor(length / 2)
new_arr.append(arr[half])
subarr1 = [arr[i] for i in range(1, half)]
subarr2 = [arr[i] for i in range(half + 1, length - 1)]
subarrs = [subarr1, subarr2]
# subarrs = seperate_arr(arr, new_arr)
new_arr += dichotomous_permutation(subarrs, layer=layer+1)

else:
new_arr = []
subarrs = []
for a in arr:
length = len(a)
if length <= 2:
new_arr += a
else:
# subarrs += seperate_arr(a, new_arr)
if (length % 2) == 0:
half = int(length / 2)
new_arr += [a[half - 1], a[half]]
subarr1 = [a[i] for i in range(0, half - 1)]
else:
half = math.floor(length / 2)
new_arr.append(a[half])
subarr1 = [a[i] for i in range(0, half)]
subarr2 = [a[i] for i in range(half + 1, length)]
subarrs += [subarr1, subarr2]

if len(subarrs) > 0:
new_arr += dichotomous_permutation(subarrs, layer=layer+1)

return new_arr

# length = len(arr)
# if length <= 2:
# return arr

# new_arr = [arr[0], arr[-1]]
# if (length % 2) == 0:
# half = int(length / 2)
# new_arr += [arr[half - 1], arr[half]]
# subarr1 = [arr[i] for i in range(1, half - 1)]
# else:
# half = math.floor(length / 2)
# new_arr.append(arr[half])
# subarr1 = [arr[i] for i in range(1, half)]
# subarr2 = [arr[i] for i in range(half + 1, length - 1)]
# if len(subarr1) > 0:
# new_arr += dichotomous_permutation(subarr1)
# if len(subarr2) > 0:
# new_arr += dichotomous_permutation(subarr2)

# return new_arr

Loading…
Cancel
Save