我想在python中制作一个数组,其中包含约40000个元素,每个元素都是大小为28x28的随机图像。我使用此代码,但是会产生以下错误。我是python的初学者。
wtrain=np.zeros((40000,28,28,1))
for i in range(40000):
w_main = np.random.randint(2,size=(1,4,4,1))
w_main=w_main.astype(np.float32)
w_expand=np.zeros((1,28,28,1),dtype='float32')
w_expand[:,0:4,0:4]=w_main
w_expand.reshape(1,28,28,1)
wtrain[i,:,:,:]=w_expand
错误
所有输入数组(x)应该具有相同数量的样本。得到数组 形状:[(49999,28,28,1),(1、28,28,1)]
出什么问题了?如何将这些随机图像添加到训练中?谢谢
我将代码更改为此:
wtrain=[]
for i in range(2):
w_main = np.random.randint(2,size=(1,4,4,1))
w_main=w_main.astype(np.float32)
w_expand=np.zeros((1,28,28,1),dtype='float32')
w_expand[:,0:4,0:4]=w_main
w_expand.reshape(1,28,28,1)
wtrain.append(w_expand)
答案 0 :(得分:0)
制作具有所需形状的zeros
数组-我使用(3,7,7)而不是您的(40000,28,28)。
a = np.zeros((3,7,7))
制作一个具有您指定形状的随机数数组-第一维尺寸与zeros
数组相同
b = np.random.randint(0,255, size=(3,4,4))
使用赋值左侧的索引将随机值分配到zeros数组,将这些值放在所需的位置
a[:,:4,:4] = b
结果
In [20]: a[0,...]
Out[20]:
array([[ 241., 228., 176., 194., 0., 0., 0.],
[ 185., 240., 219., 175., 0., 0., 0.],
[ 206., 82., 32., 137., 0., 0., 0.],
[ 58., 181., 242., 168., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0.]])
In [21]: a[1,...]
Out[21]:
array([[ 25., 19., 251., 89., 0., 0., 0.],
[ 204., 25., 72., 176., 0., 0., 0.],
[ 189., 37., 33., 49., 0., 0., 0.],
[ 72., 168., 68., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0.]])
In [22]: a[2,...]
Out[22]:
array([[ 74., 228., 186., 133., 0., 0., 0.],
[ 147., 83., 194., 205., 0., 0., 0.],
[ 34., 185., 21., 6., 0., 0., 0.],
[ 14., 245., 46., 154., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0.]])
通过重塑添加另一个尺寸
In [26]: x,y,z = a.shape
In [27]: c = a.reshape((x,y,z,1))
In [28]: c.shape
Out[28]: (3, 7, 7, 1)