将列表重塑为具有最大行长度的形状

时间:2018-03-07 09:22:02

标签: python numpy reshape

问题

我有一个数组:[[ 1., 2., 3.], [ 4., 5., 6.], [ 7., 8., 9.], [10.]]
我想知道将这个数组放在以下形状上的最佳方法:

foo

我该怎么办?
谢谢!

我目前的工作

由于numpy.reshape()不包含使用import numpy as np np.reshape(foo,(-1,3)) 的3个元素中的多个,因此会出错

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

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

ValueError:无法将大小为10的数组重塑为shape(3)

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

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]] 进行扩展:

nan

备注

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

1 个答案:

答案 0 :(得分: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]]