使用 Numpy 而不在数组中获得额外的维度
Using Numpy without getting extra dimensions in arrays
我正在开始使用 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
我正在开始使用 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