Перебор параметров функции в Python (с использованием двумерного массива и списка десятичных дробей) - PullRequest
0 голосов
/ 03 июля 2018

Я определил функцию, которая принимает 2 параметра: симметричную матрицу M и значение вероятности p. Я хочу определить функцию, которая перебирает мои параметры. Цикл начинается с вероятностью 0,01 и останавливается, когда достигает p. На каждом шаге функция выбирает случайные строки и столбцы из матрицы M в соответствии с вероятностью и удаляет их. Затем делает то же самое с новым M с увеличенной вероятностью. Я не могу получить результаты с моим кодом

функция диапазона, которая поддерживает десятичные числа

def frange(start, end, step):
    tmp = start
    while tmp < end:
        yield tmp
        tmp += step

функция цикла (выбрать случайные строки и столбцы из матрицы и удалить их)

def loop(M, p):
    for i in frange(0.01, p, 0.01):
        indices = random.sample(range(np.shape(M)[0]),
                                int(round(np.shape(M)[0] * i)))
        M = np.delete(M, indices, axis=0)  # removes rows
        M = np.delete(M, indices, axis=1)  # removes columns
        return M, indices

1 Ответ

0 голосов
/ 03 июля 2018

Таким образом, вы возвращаете только M и p для вашего первого индекса, i=0.01, это потому, что цикл остановится, как только вы что-то вернете. Кроме того, поскольку вы можете использовать range, указанный в python, ваша первая функция излишня. Я предлагаю вам вернуть ваши матрицы и индексы, например, с помощью List (вы также можете сделать это с помощью np.arrays).

def loop(M, p):
  mat_list  = []
  indices_list = []
  for i in range(0.01, p, 0.01):
      indices = random.sample(range(np.shape(M)[0]),
                              int(round(np.shape(M)[0] * i)))
      M = np.delete(M, indices, axis=0)  # removes rows
      M = np.delete(M, indices, axis=1)  # removes columns
      mat_list.append(M)
      indices_list.append(indices)
  return mat_list, indices_list

Если вы также хотите включить вероятность p, то вы должны пройти через range(0.01, p+0.01, 0.01).

...