将多维列表转换为多维numpy.array

时间:2018-01-25 17:07:28

标签: python arrays numpy multidimensional-array

我无法将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()没有看到其他维度。

1 个答案:

答案 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