如何在列表中重塑元素:ValueError:新数组的总大小必须不变


import numpy as np
i = np.array( [ [0,1],[1,2] ] )
j = np.array( [ [2,1],[3,3] ] )
k = np.array( [ [2,1],[3,3] ] )
l = np.array( [ [2,1],[3,3] ] )
l1 = np.array( [ [2,1],[3,3] ] )
l2 = np.array( [ [2,1],[3,3] ] )
l3 = np.array( [ [2,1],[3,3] ] )
l4 = np.array( [ [2,1],[3,3] ] )
a = [i, j, k, l, l1, l2, l3, l4]
b = []
b.append(a)
b.append(np.array( [ [2,1],[3,3] ] ))
b.append(np.array( [ [2,1],[3,3] ] ))
b.append(np.array( [ [2,1],[3,3] ] ))
b.append(np.array( [ [2,1],[3,3] ] ))
b.append(np.array( [ [2,1],[3,3] ] ))
arr = np.array(b)
print np.shape(b)
c = np.reshape(arr, (13, 2 ,2))
print np.shape(c)

当我尝试此错误时,我会收到此错误消息:

ValueError: total size of new array must be unchanged

我如何在列表中重塑元素。我无法将数组的 len()在列表中重塑。

当您打印出arr时,您会得到这样的东西:

array([ [array([[0, 1],
       [1, 2]]), array([[2, 1],
       [3, 3]]), array([[2, 1],
       [3, 3]]), array([[2, 1],
       [3, 3]]), array([[2, 1],
       [3, 3]]), array([[2, 1],
       [3, 3]]), array([[2, 1],
       [3, 3]]), array([[2, 1],
       [3, 3]])],
       [[2 1]
 [3 3]], [[2 1]
 [3 3]], [[2 1]
 [3 3]], [[2 1]
 [3 3]],
       [[2 1]
 [3 3]]], dtype=object)

您可能会明白这不能重塑。它是object的NP阵列。其中的条目恰好是NP阵列。

但是要具有一个可重塑的实体,您需要在其中具有一些固定尺寸的NP阵列,其中具有普通类型(int,float,...)。您的输入建筑物(append()调用)构建无法重塑的东西。

我想您替换这些行时可能会得到想要的东西:

b = []
b.append(a)

通过此行:

b = a[:]

然后我可以在其余的之后轻松执行此操作:

c = np.reshape(arr, (13, 2 ,2))

c将是:

array([[[0, 1],
        [1, 2]],
       [[2, 1],
        [3, 3]],
       [[2, 1],
        [3, 3]],
       [[2, 1],
        [3, 3]],
       [[2, 1],
        [3, 3]],
       [[2, 1],
        [3, 3]],
       [[2, 1],
        [3, 3]],
       [[2, 1],
        [3, 3]],
       [[2, 1],
        [3, 3]],
       [[2, 1],
        [3, 3]],
       [[2, 1],
        [3, 3]],
       [[2, 1],
        [3, 3]],
       [[2, 1],
        [3, 3]]])