是否有一种方法可以为非'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]]])