我有以下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), ...]]
如何创建最终矩阵?
答案 0 :(得分: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)