【问题标题】:Using Numpy without getting extra dimensions in arrays使用 Numpy 而不在数组中获得额外的维度
【发布时间】:2020-05-31 18:30:29
【问题描述】:

我开始使用 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()

【问题讨论】:

  • 从一维数组列表中创建一个二维数组是可以的,只要一维数组都具有相同的形状。如果它们的形状不同,您将得到一维数组(对象)或错误,而不是二维数组。

标签: python numpy readability


【解决方案1】:

首先创建一个所需大小的随机矩阵。在你的情况下是 5x5,因为你有 5 个状态:

A = np.random.random((5, 5))

然后对其进行归一化,使每一列之和为 1:

B = A / A.sum(axis = 0)

然后转置它,使每一行总和为 1:

B = B.T

【讨论】:

    猜你喜欢
    • 2014-10-16
    • 2019-11-10
    • 2013-07-08
    • 1970-01-01
    • 2021-02-16
    • 2023-03-07
    • 2023-03-23
    • 2020-09-01
    • 1970-01-01
    相关资源
    最近更新 更多