Python在for循环中生成多个随机矩阵

2024-04-26 10:40:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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个矩阵的操作时,我失败了-生成的所有矩阵都是相同的。

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

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


Tags: 代码inimportnumpyforasnprange
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循环将匹配维度ix中的所有值相加。诀窍在于expand_dims方法创建了一个虚拟维度,使得只有一个不匹配的维度等于1。然后,可以在两个阵列之间执行这些操作。第二个expand_dims也有类似的作用,但在不同的维度上。最后,如果希望将其作为列表,可以将其转换为包含100个数组的列表:

out = list(out)

我不确定这是否是您想要的,但基本上我创建了一个名为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)

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

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')

相关问题 更多 >