我开始使用Numpy,并且尝试使用其中的一些功能来填充一个二维正方形矩阵,其中所有行的总和为1。这已经完成了到目前为止我打算做的事情,但是,此代码以前有几处引人注意的地方,使我可以更改一维数组的列表。这种解决方案感觉不太优雅-清晰地编写此代码的最佳实践是什么?
import numpy as np
class Markov:
def __init__(self, states=5):
self.prob_dist = []
print(self.prob_dist)
for i in range(states):
change_prob = [1 for x in range(states)]
print(change_prob)
self.prob_dist.append(list(np.random.dirichlet(change_prob, size=1)[0]))
print(self.prob_dist)
def main():
output = Markov()
if __name__ == '__main__':
main()
首先创建所需大小的随机矩阵。在您的情况下为5x5,因为您有5种状态:
A = np.random.random((5, 5))
然后对其进行归一化,以使每一列的总和为1:
B = A / A.sum(axis = 0)
然后转置它,以便每一行总计为1:
B = B.T