我目前正在研究一个名为 X
的 3d 数组,大小为 (100,5,1)
。我想将随机创建的名为 s
、维度为 (5,1)
的二维数组分配给 X
。我的代码如下。
for i in range(100):
s = np.random.uniform(-1, 2, 5)
for j in range(5):
X[:,j,:] = s[j]
我有 100 个 (5,1)
数组,它们都是一样的。我明白为什么我会得到这个结果,但我找不到解决方案。
我需要在 X
中有 100 个唯一的 (5,1)
数组。
您正在索引整个第一个维度,因此广播了一个 5 x 1
数组。这就是为什么您看到的是副本,它只记得您在整个第一维上看到的循环中创建的最后一个随机生成的 5 x 1
数组。要解决此问题,只需将索引从 :
更改为 i
。
X[i,j,:] = s[j]
但是,这似乎是一种糟糕的代码味道。我建议通过将 size
输入参数覆盖到 numpy.random.uniform
中,一次性分配您需要的确切大小。
s = np.random.uniform(low=-1, high=2, size=(100, 5, 1))
因此,不要循环,只使用上面的语句一次。这是有道理的,因为您创建的每个 5 x 1
数组都是从相同的概率分布中采样的。从效率的角度来看,只分配一次所需的大小会更有意义。
我是一名优秀的程序员,十分优秀!