【问题标题】:Python generate multiple random matrices in a for loopPython 在 for 循环中生成多个随机矩阵
【发布时间】:2019-11-11 06:53:15
【问题描述】:

我正在尝试使用 for 循环生成 100 个随机列随机矩阵并保存它们。

下面的代码是生成一个单独的随机列随机矩阵。

import numpy as np
import random

For x in range(100):
    a = 2
    sto = np.identity(2)
    sto = sto + np.random.uniform(low=0.2, high=0.5, size=(a, a))
    sto = sto / sto.sum(axis=0, keepdims=1)
    print(sto)

当我尝试使用 for 循环执行生成 100 个矩阵的操作时,我失败了 - 所有生成的矩阵都是相同的。

编辑:我现在可以在循环中生成不同的矩阵。

但我仍然不知道如何将它们全部保存以在以后的工作中使用(例如:保存它们以在以后的步骤中将它们中的一些相乘)?

【问题讨论】:

  • 我在您的代码中看不到任何 for 循环。可以展示一下吗?
  • 对不起,我刚刚编辑了它。我想我解决了一遍又一遍生成相同矩阵的问题:现在生成的矩阵彼此不同。但我仍然无法保存它们。
  • 将它们添加到列表中。
  • 我试过了。我基本上失败了,我生成了不同的列表。

标签: python numpy for-loop matrix random


【解决方案1】:

为什么不把它们保存在硬盘上:

import numpy as np

random_matrices = np.random.rand(100,2,2)

np.save('random_matrices.npy', random_matrices)

random_matrices_loaded = np.load('random_matrices.npy')

【讨论】:

    【解决方案2】:

    我不确定这是否是您要查找的内容,但基本上我创建了一个名为 sto1 的列表,以便您可以在代码的后面部分访问它

    import numpy as np
    import random
    
    sto1 = []
    for x in range(100):
        a = 2
        sto = np.identity(2)
        sto = sto + np.random.uniform(low=0.2, high=0.5, size=(a, a))
        sto = sto / sto.sum(axis=0, keepdims=1)
        sto1.append(sto)
    print(sto1)
    

    【讨论】:

      【解决方案3】:

      我不确定您对结果的确切期望,但我认为您不需要 for 循环。

      这是我的解决方案:

      a = 2
      i = np.expand_dims(np.eye(a), 0)
      x = np.random.uniform(low=0.2, high=0.5, size=(100, a, a))
      s = i + x
      out = s / np.expand_dims(s.sum(1), 1)
      

      实际上,在内部,一个 100 循环将所有匹配维度的值相加,i 和 x。诀窍是expand_dims 方法创建了一个虚拟维度,以便只能有一个不匹配的维度等于 1。然后,两个数组之间的这些操作是可能的。第二个expand_dims 也有类似的作用,但维度不同。最后,如果你想要它作为一个列表,你可以将它转换为一个包含 100 个数组的列表:

      out = list(out)
      

      【讨论】:

        猜你喜欢
        • 2016-02-15
        • 1970-01-01
        • 2020-04-20
        • 1970-01-01
        • 2016-06-30
        • 2021-11-18
        • 2013-10-11
        • 1970-01-01
        • 2020-10-02
        相关资源
        最近更新 更多