我无法将python list-of-list转换为3维numpy数组。
a = [
[
[1,2,3,4], # = len 4
...
], # = len 58
...
] # = len 1245
当我打电话给a = np.array(a)
时,它会将形状报告为(1245,)
,我无法重塑它。 a.reshape(1245,58,4)
它给了我错误:
ValueError: cannot reshape array of size 1245 into shape (1245,58,4)
但是如果我打印一个[0]它给了我一个58元素列表,[0] [0]给了我一个4元素列表,正如我所料,所以数据就在那里。
我看到很多堆栈交换帖想要展平它,但我只是想把它变成一个已经形状的numpy数组。我不知道为什么numpy.array()
没有看到其他维度。
答案 0 :(得分:0)
同一级别(相同的numpy轴)的列表需要具有相同的大小。否则你会获得一系列列表。
np.array([[0, 1], [2]])[0] # returns [0, 1]
np.array([[0, 1], [2, 3]])[0] # returns array([1, 2])
您可以在将列表转换为数组之前调用列表中的[pad
]来解决此问题。
此外,reshape
"的尺寸应与原始形状兼容。"含义(推理的-1
值除外)新维度的乘积应等于旧维度的乘积。
例如,在您的情况下,您有一个形状(1245,)
的数组,因此您可以调用:
a.reshape(83, 5, 3) # works
a.reshape(83, -1, 3) # works
a.reshape(83, 5, 5) # fails since 83 * 5 * 5 = 2075 != 1245