Chi*_*ack 6 python arrays numpy concatenation reshape
我有一系列形状的数字26*43264.我想把它改成一个形状的阵列,208*208但是大块的26*26.
[[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10,11,12,13,14,15,16,17,18,19]]
Run Code Online (Sandbox Code Playgroud)
变成这样的东西:
[[0, 1, 2, 3, 4],
[10,11,12,13,14],
[ 5, 6, 7, 8, 9],
[15,16,17,18,19]]
Run Code Online (Sandbox Code Playgroud)
这种重塑的问题,以前也曾出现过。但不是搜索,我将快速演示一个 numpy 方法
制作您的样本数组:
In [473]: x=np.arange(20).reshape(2,10)
In [474]: x
Out[474]:
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])
Run Code Online (Sandbox Code Playgroud)
使用 reshape 将其分成 5 个块
In [475]: x.reshape(2,2,5)
Out[475]:
array([[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9]],
[[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]]])
Run Code Online (Sandbox Code Playgroud)
并使用转置对维度重新排序,实际上对这些行重新排序
In [476]: x.reshape(2,2,5).transpose(1,0,2)
Out[476]:
array([[[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14]],
[[ 5, 6, 7, 8, 9],
[15, 16, 17, 18, 19]]])
Run Code Online (Sandbox Code Playgroud)
和另一个形状来巩固第一个二维
In [477]: x.reshape(2,2,5).transpose(1,0,2).reshape(4,5)
Out[477]:
array([[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14],
[ 5, 6, 7, 8, 9],
[15, 16, 17, 18, 19]])
Run Code Online (Sandbox Code Playgroud)
如果x已经是一个 numpy 数组,这些转置和重塑操作很便宜(时间明智)。如果x真的是嵌套列表,那么使用列表操作的其他解决方案会更快,因为制作 numpy 数组有开销。