在使用numpy中的ndarray数据时,需要将其维数进行变换,然而在实际使用numpy.reshape()函数时,发现其对不同索引位置会有想象之外的结果,因此进行了一些验证。我们以一个长度为12的向量为例:
a = np.arange(start=0, stop=12)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
然后对其进行维数变换:
b = np.reshape(a=a, newshape=[2, 3, 2])
0 | 1 |
2 | 3 |
4 | 5 |
6 | 7 |
8 | 9 |
10 | 11 |
此时,我们可以选择以最后一维作为单元,即以[0, 1], [2, 3]等块进行变换,将其变换为维数[6, 2]的矩阵:
c_1 = np.reshape(a=b, newshape=[6, 2])
得到的结果是符合预期的:
0 | 1 |
2 | 3 |
4 | 5 |
6 | 7 |
8 | 9 |
10 | 11 |
然而,如果选择以最后第二维作为单元,即以[0, 2, 4], [1, 3, 5]等块进行变换,将其变换为维数[6, 2]的矩阵:
c_2 = np.reshape(a=b, newshape=[4, 3])
期望得到的结果为:
0 | 2 | 4 |
1 | 3 | 5 |
6 | 8 | 10 |
7 | 9 | 11 |
然而实际情况为:
0 | 1 | 2 |
3 | 4 | 5 |
6 | 7 | 8 |
9 | 10 | 11 |
因此,reshape函数的维数变换只能在从第1维开始的连续几维上进行,而无法对中间某几维进行,因此需要对这种特殊情况进行单独的处理,暂时不知道有没有现成的函数能够对ndarray数据进行高效的变换