Python генерирует несколько случайных матриц в цикле for - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь сгенерировать 100 случайных столбцовых стохастических матриц, используя цикл for, и сохранить их.

Ниже приведен код для создания отдельной случайной столбцовой стохастической матрицы.

import numpy as np
import random

For x in range(100):
    a = 2
    sto = np.identity(2)
    sto = sto + np.random.uniform(low=0.2, high=0.5, size=(a, a))
    sto = sto / sto.sum(axis=0, keepdims=1)
    print(sto)

Когда я пытаюсь реализовать операцию генерации 100 матриц с циклом for, у меня не получается - все сгенерированные матрицы оказываются одинаковыми.

Редактировать: теперь я могу генерировать разные матрицы в цикле.

Но я до сих пор не знаю, как сохранить их все для использования в дальнейшей работе (например, сохранить их, чтобы умножить некоторые из них на более позднем этапе)?

Ответы [ 3 ]

1 голос
/ 30 июня 2019

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

import numpy as np
import random

sto1 = []
for x in range(100):
    a = 2
    sto = np.identity(2)
    sto = sto + np.random.uniform(low=0.2, high=0.5, size=(a, a))
    sto = sto / sto.sum(axis=0, keepdims=1)
    sto1.append(sto)
print(sto1)
0 голосов
/ 01 июля 2019

Почему бы просто не сохранить их на жестком диске:

import numpy as np

random_matrices = np.random.rand(100,2,2)

np.save('random_matrices.npy', random_matrices)

random_matrices_loaded = np.load('random_matrices.npy')
0 голосов
/ 30 июня 2019

Я не уверен точно, что вы ожидаете в качестве результата, но я не думаю, что вам нужен цикл для.

Вот мое решение:

a = 2
i = np.expand_dims(np.eye(a), 0)
x = np.random.uniform(low=0.2, high=0.5, size=(100, a, a))
s = i + x
out = s / np.expand_dims(s.sum(1), 1)

Фактически, внутренний цикл 100 добавляет все значения в соответствующих измерениях i и x.Хитрость в том, что метод expand_dims создает фиктивное измерение, чтобы иметь только одно несоответствующее измерение, равное 1. Тогда эти операции между двумя массивами возможны.Второй expand_dims также играет аналогичную роль, но в другом измерении.В конце концов, если вы хотите, чтобы это был список, вы можете преобразовать его в список из 100 массивов:

out = list(out)
...