【问题标题】:Converting list of tuples into numpy array and reshaping it?将元组列表转换为 numpy 数组并对其进行整形?
【发布时间】:2016-01-11 22:29:42
【问题描述】:

我有三个列表。

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 数组的任何帮助?

【问题讨论】:

  • np.asarray(combine_list) 产生什么? (形状和数据类型)
  • 你没有125个元素,但是125 * 3 = 375
  • @JBernardo:感谢您指出错误。

标签: python arrays list numpy tuples


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 这也有效,但@jethrocao 的回答很简单
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2017-03-08
    • 2020-08-24
    • 2018-03-16
    相关资源
    最近更新 更多