group = lambda flat, size: [flat[i:i+size] for i in range(0,len(flat), size)]
并且可以通过添加递归来推广到多维:
import operator
def shape(flat, dims):
subdims = dims[1:]
subsize = reduce(operator.mul, subdims, 1)
if dims[0]*subsize!=len(flat):
raise ValueError("Size does not match or invalid")
if not subdims:
return flat
return [shape(flat[i:i+subsize], subdims) for i in range(0,len(flat), subsize)]
>>> data = [0, 2, 7, 6, 3, 1, 4, 5]
>>> col = 4 # just grab the number of columns here
>>> [data[i:i+col] for i in range(0, len(data), col)]
[[0, 2, 7, 6],[3, 1, 4, 5]]
>>> # for pretty print, use either np.array or np.asmatrix
>>> np.array([data[i:i+col] for i in range(0, len(data), col)])
array([[0, 2, 7, 6],
[3, 1, 4, 5]])
5条答案
按热度按时间b1uwtaje1#
使用
numpy.reshape
:如果要避免在内存中复制
data
的shape
属性,也可以直接将其赋值:ajsxfq5m2#
如果你不想使用numpy,有一个简单的2d例子:
并且可以通过添加递归来推广到多维:
w80xi6nr3#
对于那些俏皮话:
j2cgzkjk4#
如果没有Numpy,我们也可以做如下..
nbysray55#
(在搜索如何工作时找到this post)