【问题标题】:Reshape list to shape with maximum row length将列表重塑为具有最大行长的形状
【发布时间】:2018-08-15 08:04:08
【问题描述】:

问题

我有一个数组:foo = [1,2,3,4,5,6,7,8,9,10]
我想知道让这个数组具有以下形状的最佳方法:

[[ 1.,  2.,  3.],
 [ 4.,  5.,  6.],
 [ 7.,  8.,  9.],
 [10.]]

我该怎么办?
谢谢!


我目前在做什么

由于 foo 不包含 3 个元素的倍数,因此使用 numpy.reshape() 会出错

import numpy as np
np.reshape(foo,(-1,3))

ValueError: 无法将大小为 10 的数组重新整形为形状 (3)

所以我需要强制我的数组包含 3 个元素的多个元素,或者通过删除一些(但我丢失了一些数据):

_foo = np.reshape(foo[:len(foo)-len(foo)%3],(-1,3))

print(_foo)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

或者通过nan扩展:

if len(foo)%3 != 0:
    foo.extend([np.nan]*((len(foo)%3)+1))

_foo = np.reshape(foo,(-1,3))
print(_foo)
[[ 1.  2.  3.]
 [ 4.  5.  6.]
 [ 7.  8.  9.]
 [10. nan nan]]

备注

  • @cᴏʟᴅsᴘᴇᴇᴅ 建议改为使用完整数组(例如使用nan0 填充)

【问题讨论】:

    标签: python numpy reshape


    【解决方案1】:

    您可以使用@NedBatchelder's chunk generator(在此点赞)。

    def chunks(l, n):
        """Yield successive n-sized chunks from l."""
        for i in range(0, len(l), n):
            yield l[i:i + n]
    
    lst = [1,2,3,4,5,6,7,8,9,10]
    
    list(chunks(lst, 3))
    
    # [[1, 2, 3],
    #  [4, 5, 6],
    #  [7, 8, 9],
    #  [10]]
    

    【讨论】:

    猜你喜欢
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2020-02-18
    • 2020-04-14
    • 2020-10-05
    • 2020-01-09
    • 1970-01-01
    相关资源
    最近更新 更多