#python #numpy #scipy
#python #numpy #scipy
Вопрос:
У меня есть следующая матрица numpy:
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.19707245 для второго и 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:
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)
Комментарии:
1. Нет; в принципе, я хотел бы создать распределение по Гауссу для каждого столбца, со средним значением, заданным значением, которое повторяется в исходной матрице R, вычисляемой на каждом шаге [0,1,2]
2. проверьте теперь, значения совпадают с вашей результирующей матрицей, хотя они кажутся странными. Однако, как только вы поймете, как использовать матрицы в качестве аргументов для
3. проблема в том, что в каждом столбце используются одни и те же значения; вместо этого я бы ожидал, что pdf, оцененный в 0, отличается от pdf, оцененного в 1 и 2; и это должно происходить для каждой строки в каждом столбце. В конечном счете, матрица должна содержать 9 разных значений из трех разных гауссианов со средними значениями, соответственно, равными [ 5.39909665 24.19707245 39.89422804]