通过自定义订单进行麻木重塑



是否有一种方法可以为非'C'或'F'的整形函数生成自定义订单?

我想取一个平面数组,通过首先更改第二个索引,然后更改第三个索引,最后更改第一个索引,使其成为三维数组?

例如

a = np.arange(12).reshape((2, 2, 3), (2, 3, 1)) # Second parameter not real numpy

导致:

a[:,:,0] = [[0, 1], [6, 7]]
a[:,:,1] = [[2, 3], [8, 9]]
a[:,:,2] = [[4, 5], [10, 11]]

这似乎是一个非常普通的功能,但如果不在循环中手动重塑它,我似乎找不到一种方法来实现它,这是不可取的。

谢谢你的帮助!

首先,您生产了什么?

In [127]: a = np.zeros((2,2,2),int)
In [128]: a = np.zeros((2,2,3),int)
In [129]: a[:,:,0] = [[0, 1], [6, 7]]
...: a[:,:,1] = [[2, 3], [8, 9]]
...: a[:,:,2] = [[4, 5], [10, 11]]
In [130]: a
Out[130]: 
array([[[ 0,  2,  4],
[ 1,  3,  5]],
[[ 6,  8, 10],
[ 7,  9, 11]]])

现在让我们试着倒退:

简单的重塑无济于事:

In [131]: a.reshape(2,6)
Out[131]: 
array([[ 0,  2,  4,  1,  3,  5],
[ 6,  8, 10,  7,  9, 11]])

但是转换最后两个轴:

In [132]: a.transpose(0,2,1)
Out[132]: 
array([[[ 0,  1],
[ 2,  3],
[ 4,  5]],
[[ 6,  7],
[ 8,  9],
[10, 11]]])
In [133]: a.transpose(0,2,1).reshape(2,6)
Out[133]: 
array([[ 0,  1,  2,  3,  4,  5],
[ 6,  7,  8,  9, 10, 11]])

所以在前进的方向上:

In [135]: np.arange(12).reshape(2,3,2).transpose(0,2,1)
Out[135]: 
array([[[ 0,  2,  4],
[ 1,  3,  5]],
[[ 6,  8, 10],
[ 7,  9, 11]]])

相关内容

  • 没有找到相关文章

最新更新