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

2024-04-23 17:44:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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()来对其进行整形。你知道吗


Tags: importnumpyl1列表asnparrayprint
1条回答
网友
1楼 · 发布于 2024-04-23 17:44:40

当您打印出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]]])

相关问题 更多 >