Создание нормально распределенных столбцов с разными средними значениями

#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. проверьте теперь, значения совпадают с вашей результирующей матрицей, хотя они кажутся странными. Однако, как только вы поймете, как использовать матрицы в качестве аргументов для pdf , вы сможете работать с этим самостоятельно в любом случае.

3. проблема в том, что в каждом столбце используются одни и те же значения; вместо этого я бы ожидал, что pdf, оцененный в 0, отличается от pdf, оцененного в 1 и 2; и это должно происходить для каждой строки в каждом столбце. В конечном счете, матрица должна содержать 9 разных значений из трех разных гауссианов со средними значениями, соответственно, равными [ 5.39909665 24.19707245 39.89422804]