将列表重塑为具有最大行长度的形状
Reshape list to shape with maximum row length
问题
我有一个数组: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: cannot reshape array of size 10 into shape (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ᴘᴇᴇᴅ 建议改为使用完整数组(例如用
nan
或 0
填充)
您可以使用 @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]]
问题
我有一个数组: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: cannot reshape array of size 10 into shape (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ᴘᴇᴇᴅ 建议改为使用完整数组(例如用
nan
或0
填充)
您可以使用 @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]]