将元组列表转换为numpy数组并调整其形状?

4

我有三个列表。

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个元素。

现在我想将这个组合列表转换为一个形状为(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数组?


np.asarray(combine_list) 会产生什么结果?(形状和数据类型) - hpaulj
你没有125个元素,但是 125 * 3 = 375 - JBernardo
@JBernardo:感谢你指出错误。 - Aman
2个回答

2

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

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

1
如果您确实需要在5x5x5中使用3个整数,则需要使用3个整数的数据类型。使用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)

这种方法也可行,但是@jethrocao提供的答案更加简单易懂。 - Aman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接