Я пытаюсь сгенерировать 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, у меня не получается - все сгенерированные матрицы оказываются одинаковыми.

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

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

0
experimental music 30 Июн 2019 в 03:44

3 ответа

Лучший ответ

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

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

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)
0
Mehdi 30 Июн 2019 в 02:04

Я не уверен, что это то, что вы ищете, но в основном я создал список с именем 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)
1
Mehdi 30 Июн 2019 в 02:05

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

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
some_name.py 1 Июл 2019 в 07:42