例子:
def showArrayOfList(a,b,c):
wlist = [np.zeros((szNext,szThis)) for (szThis,szNext) in [(a,b),(b,b),(b,b),(b,c)]]
print "wlist:", map(np.shape,wlist)
wArray = np.asarray(wlist)
print "wArray:", map(np.shape,wArray)
print "shape wArray:", shape(wArray)
np.zeros
可以替换为返回给定形状的矩阵的任何其他矩阵函数。
以下是我期望得到的输出结果(也是实际得到的结果):
In[1]: ShowArrayOfList(1,4,5)
Out[1]: wlist: [(4, 1), (4, 4), (4, 4), (5, 4)]
wArray: [(4, 1), (4, 4), (4, 4), (5, 4)]
shape wArray: (4,) #An array of 4 references(?), to arrays of various sizes
In[2]: ShowArrayOfList(5,5,5)
Out[2]: wlist: [(5, 5), (5, 5), (5, 5), (5, 5)]
wArray: [(5, 5), (5, 5), (5, 5), (5, 5)]
shape wArray: (4, 5, 5) #4 arrays of shape (5,5)
但对于形式为a! = b
和b == c
的输入,情况完全不同。
Int[3]: showArrayOfList(6,5,5)
Out[3]: wlist: [(5, 6), (5, 5), (5, 5), (5, 5)]
wArray: [(5,), (5,), (5,), (5,)] #Where did my second Dimension Go?
shape wArray: (4, 5)
Int[4]: showArrayOfList(2,4,4)
Out[4]:
wlist: [(4, 2), (4, 4), (4, 4), (4, 4)]
wArray: [(4,), (4,), (4,), (4,)] #Where did my second Dimension Go?
shape wArray: (4, 4)
这对我来说是一个非常难以找到的bug,经过一些思考,我认为它与广播系统有关。 我想要解释一下正在发生的事情。(我在脑海中有一个模糊的概念)
参考一下,我制作一个数组的数组是为了进行减法:
wArray=wArray-dWs
比wList=[w-dW, (w,dW) in zip(wList,dWs)]
更清晰易读。
1.9.0dev
中,最后两种情况下的wArray
是一个由None
组成的数组。如果我在交互模式下尝试,会出现ValueError: could not broadcast input array from shape (5,5) into shape (5)
的错误。无论这是否是我的版本中的错误,这都不是构建数组的可靠方法。我认为wArray
应该始终具有形状(4,)
,而不管a,b,c
是什么。不应该有时是2D或3D。 - hpaulj