题
我有一个数组:foo = [1,2,3,4,5,6,7,8,9,10]
我想知道将这个数组放在以下形状上的最佳方法:
[[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.],
[10.]]
我应该怎么做 ?
谢谢!
我目前在做什么
由于foo不包含使用numpy.reshape()的3个元素中的多个元素,因此会出错
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(在那里upvote).
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]]