我目前正在处理名为X
的大小为(100,5,1)
的3d数组。我想将随机创建的名为s
的2d数组,(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)
数组,他们都是一样的。我可以看到为什么我有这个结果,但我无法找到解决方案。
我需要在(5,1)
中拥有100个唯一的X
数组。
答案 0 :(得分:2)
您正在索引整个第一维,从而广播单个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
数组都是从相同的概率分布中采样的。从效率的角度来看,只需分配一次所需的大小就更有意义了。