met*_*one 8 python numpy reshape
我以为我理解了Numpy中的重塑功能,直到我搞砸了它并遇到了这个例子:
a = np.arange(16).reshape((4,4))
Run Code Online (Sandbox Code Playgroud)
返回:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义,但是当我这样做时:
a.reshape((2,8), order = 'F')
Run Code Online (Sandbox Code Playgroud)
它返回:
array([[0, 8, 1, 9, 2, 10, 3, 11],
[4, 12, 5, 13, 6, 14, 7, 15]])
Run Code Online (Sandbox Code Playgroud)
我希望它能回归:
array([[0, 4, 8, 12, 1, 5, 9, 13],
[2, 6, 10, 14, 3, 7, 11, 15]])
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这里发生了什么吗?
a
'F'顺序的元素
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Run Code Online (Sandbox Code Playgroud)
是[0,4,8,12,1,5,9 ...]
现在用(2,8)数组重新排列它们.
我认为reshape
文档谈论了对元素的粗暴,然后重新塑造它们.显然,首先完成了ravel.
试验a.ravel(order='F').reshape(2,8)
.
哎呀,我得到了你的期望:
In [208]: a = np.arange(16).reshape(4,4)
In [209]: a
Out[209]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
In [210]: a.ravel(order='F')
Out[210]: array([ 0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15])
In [211]: _.reshape(2,8)
Out[211]:
array([[ 0, 4, 8, 12, 1, 5, 9, 13],
[ 2, 6, 10, 14, 3, 7, 11, 15]])
Run Code Online (Sandbox Code Playgroud)
好的,我必须在重塑期间保持'F'顺序
In [214]: a.ravel(order='F').reshape(2,8, order='F')
Out[214]:
array([[ 0, 8, 1, 9, 2, 10, 3, 11],
[ 4, 12, 5, 13, 6, 14, 7, 15]])
In [215]: a.ravel(order='F').reshape(2,8).flags
Out[215]:
C_CONTIGUOUS : True
F_CONTIGUOUS : False
...
In [216]: a.ravel(order='F').reshape(2,8, order='F').flags
Out[216]:
C_CONTIGUOUS : False
F_CONTIGUOUS : True
Run Code Online (Sandbox Code Playgroud)
来自np.reshape
docs
您可以将重塑视为首先对数组进行整形(使用给定的索引顺序),然后使用与raveling相同的索引顺序将raveled数组中的元素插入到新数组中.
这些注释order
相当长,所以这个话题令人困惑也就不足为奇了.
归档时间: |
|
查看次数: |
4204 次 |
最近记录: |