numpy.reshape()针对高维数据不同的索引位置的分析

在使用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])
b[0, :, :]
0 1
2 3
4 5
b[1, :, :]
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数据进行高效的变换

猜你喜欢

转载自blog.csdn.net/freeyy1314/article/details/81662691
今日推荐