将元组列表转换为numpy数组并重新整形?

时间:2015-10-14 01:16:33

标签: python arrays list numpy tuples

我有三个清单。

a = [1, 2, 3, 4, 5]  
b = [6, 7, 8, 9, 10]  
c = [11, 12 , 13, 14, 15]  

我将它们组合起来并使用列表推导创建一个元组列表

combine_list = [(a1, b1, c1) for a1 in a for b1 in b for c1 in c]

此组合列表有5 * 5 * 5 = 125个元素。

现在我想将此combine_list转换为具有形状(5,5,5)的numpy数组。所以,我使用以下代码:

import numpy as np
combine_array = np.asarray(combine_list).reshape(5, 5, 5)

这给了我一个错误:

ValueError: total size of new array must be unchanged

但是,当我尝试将单个125个数字(没有元组元素)的列表重新整形为numpy数组时,不会发生这样的错误。

有关如何将元组列表重新整形为numpy数组的任何帮助吗?

2 个答案:

答案 0 :(得分:1)

如果你真的需要5x5x5中的3个整数,那么你需要一个3个整数的dtype。使用itertools.product组合列表:

>>> import itertools
>>> np.array(list(itertools.product(a,b,c)), dtype='int8,int8,int8').reshape(5,5,5)

或者,只需在重塑中包含3个元素:

>>> np.array(list(itertools.product(a,b,c))).reshape(5,5,5,3)

答案 1 :(得分:0)

不确定这是否是您想要的,但您可以使用多维列表理解。

combine_list = [[[ (i, j, k) for k in c] for j in b] for i in a]
combine_array = np.asarray(combine_list)