Трудность понимания матричных операций в Python - PullRequest
0 голосов
/ 10 марта 2019

Начиная с первоначального предположения о случайно созданной двоичной матрице 4 × 4, напишите фрагмент кода, который выполняет следующие более 100 итераций:

  1. выберите случайный элемент матрицы и создайте новую матрицу, равную старой матрице, с перевернутой случайным образом выбранной цифрой (от 0 до 1 или наоборот);
  2. Если новая матрица имеет меньшее объективное значение, чем старая матрица, замените ее новой матрицей, в противном случае сохраните текущую матрицу.

Выведите окончательную матрицу 4 × 4 и значение определителя, найденное в конце 100 итераций.

import numpy as np
MOld = np.random.randint(2, size=[4,4])
for j in range(100): #for loop over 100 iterations
    MNew = np.array(MOld) #new matrix equal to old matrix
    i,j = np.random.randint(4), np.random.randint(4) #choosing random elements of the matrix.
    MNew[i,j] = 1 - MNew[i,j] #do not understand this
    if f(MNew) < f(MOld): #if new matrix < old matrix
        MOld = MNew #replacing value

print(MOld) #printing original 4x4 matrix
print(f(MOld)) #printing determinant value

Я пытаюсь улучшить мое понимание этого кода, если кто-нибудь может проверить мои комментарии после хэштега #, я был бы признателен.

В частности, я не понимаю этого шага:

MNew [i, j] = 1 - MNew [i, j]

Спасибо за любую помощь заранее.

1 Ответ

1 голос
/ 10 марта 2019

Шаг:

Если MNew [i, j] было 1, то MNew [i, j] теперь равно 1 - 1 = 0.
Если MNew [i, j] было 0, то Mnew[i, j] теперь равно 1 - 0 = 1

Итак, вы видите, что это способ перевернуть значение из предыдущей итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...