import numpy as np
# 创建了三维的 ndarray
a = np.arange(8).reshape(2,2,2)
输出a为原数组:
[[[0 1] [2 3]]
[[4 5] [6 7]]]
# 将轴 2 滚动到轴 0(宽度到深度)
#numpy.rollaxis(arr, axis, start),rollaxis的公式,参数说明如下:
#arr
:数组#axis
:要向后滚动的轴,其它轴的相对位置不会改变#start
:默认为零,表示完整的滚动。会滚动到特定位置。
b = np.rollaxis(a,2,0)
输出b为调用 rollaxis 函数:
[[[0 2] [4 6]]
[[1 3] [5 7]]]
为什么呢??????
解:
三维数组array(轴0,轴1,轴2),将轴2滚动到轴0位置,其余轴顺序不变,即new_array(轴2,轴0,轴1)
分别写出各元素的在a和b中的位置坐标,如下图
a.array | element | b.array |
[0,0,0] | 0 | [0,0,0] |
[0,0,1] | 1 | [1,0,0] |
[0,1,0] | 2 | [0,0,1] |
[0,1,1] | 3 | [1,0,1] |
[1,0,0] | 4 | [0,1,0] |
[1,0,1] | 5 | [1,1,0] |
[1,1,0] | 6 | [0,1,1] |
[1,1,1] | 7 | [1,1,1] |
shape=(2,2,2)的三维数组轴2滚动到轴0之后仍然是shape=(2,2,2),所以无论是a还是b数组,各个元素的位置坐标都是确定的且是一致的,所以本对应表全部写在一个表格便于对照,(如果轴滚动导致输出数组的形状变了,请另写出新表的各个元素的绝对位置来做对应),找到上表中的a、b值填到对应格子:
绝对位置 | [0,0,0] | [0,0,1] |
a | 0 | 1 |
b | 0 | 2 |
绝对位置 | [0,1,0] | [0,1,1] |
a | 2 | 3 |
b | 4 | 6 |
绝对位置 | [1,0,0] | [1,0,1] |
a | 4 | 5 |
b | 1 | 3 |
绝对位置 | [1,1,0] | [1,1,1] |
a | 6 | 7 |
b | 5 | 7 |
可以清晰得出,对于a数组,值排列为:
[[[0 1] [2 3]] [[4 5] [6 7]]]
对于b数组,值排列为:
[[[0 2] [1 3]] [[4 6] [5 7]]]
如果在a数组的基础上轴2挪到轴1,new_array.shape=(轴0,轴2,轴1)
# 将轴 2 滚动到轴 1:(宽度到高度)
c = np.rollaxis(a,2,1)
先将元素与数组的位置对应关系写清楚,如下图:
a.array | element | b.array | c.array |
[0,0,0] | 0 | [0,0,0] | [0,0,0] |
[0,0,1] | 1 | [1,0,0] | [0,1,0] |
[0,1,0] | 2 | [0,0,1] | [0,0,1] |
[0,1,1] | 3 | [1,0,1] | [0,1,1] |
[1,0,0] | 4 | [0,1,0] | [1,0,0] |
[1,0,1] | 5 | [1,1,0] | [1,1,0] |
[1,1,0] | 6 | [0,1,1] | [1,0,1] |
[1,1,1] | 7 | [1,1,1] | [1,1,1] |
再将元素一一对应放到新的数组位置中:
绝对位置 | [0,0,0] | [0,0,1] |
a | 0 | 1 |
b | 0 | 2 |
c | 0 | 2 |
绝对位置 | [0,1,0] | [0,1,1] |
a | 2 | 3 |
b | 4 | 6 |
c | 1 | 3 |
绝对位置 | [1,0,0] | [1,0,1] |
a | 4 | 5 |
b | 1 | 3 |
c | 4 | 6 |
绝对位置 | [1,1,0] | [1,1,1] |
a | 6 | 7 |
b | 5 | 7 |
c | 5 | 7 |
就可以得到c数组的元素排列为:
[[[0 2]
[1 3]]
[[4 6]
[5 7]]]
---------------------------------------完----------------------------------------------
本文含有隐藏内容,请 开通VIP 后查看