Создать нормально распределенные столбцы с разными средними значениями - PullRequest
0 голосов
/ 07 марта 2019

У меня есть следующая матовая матрица:

R = np.matrix(np.ones([3,3]))

# Update R matrix based on sales statistics
for i in range(0, len(R)):
    for j in range(0, len(R)):  
        R[j,i] = scipy.stats.norm(2, 1).pdf(i) * 100  

print(R)

[[ 5.39909665 24.19707245 39.89422804]
 [ 5.39909665 24.19707245 39.89422804]
 [ 5.39909665 24.19707245 39.89422804]]

Я хотел бы преобразовать каждый столбец, , умножающий индекс (0,1,2) на соответствующее значение плотности нормального распределения, с среднее значение равно, в частности, 5,39909665 для первого столбца, 24,19727245 для второго и 39,8942280 для третьего; и стандартное отклонение равно 1.

В конечном итоге, создание матрицы как:

[norm(5.39, 1).pdf(0), norm(24.197, 1).pdf(0), ...]
     [ norm(5.39, 1).pdf(1), norm(24.197, 1).pdf(1), ...]
     [ norm(5.39, 1).pdf(2), norm(24.197, 1).pdf(2), ...]]

Как я могу создать окончательную матрицу?

1 Ответ

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

Метод pdf работает так же, как любая функция numpy, в том смысле, что вы можете вводить массивы одинаковых форм в комбинации со скалярами.Вы можете создать R с чем-то вроде:

ix = np.repeat(np.arange(3),3).reshape((3,3)) #row index, or ix.T for column index
R = scipy.stats.norm(2,1).pdf(ix.T)*100
>>array([[ 5.39909665, 24.19707245, 39.89422804],
   [ 5.39909665, 24.19707245, 39.89422804],
   [ 5.39909665, 24.19707245, 39.89422804]])

Следуя той же логике, если вы хотите, чтобы индекс [i, j] был scipy.stats.norm(scipy.stats.norm(2,1).pdf(j) * 100, 1).pdf(i) (как в матрице, которую вы указали в качестве результата), используйте:

scipy.stats.norm(scipy.stats.norm(2,1).pdf(ix.T) * 100, 1).pdf(ix)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...