python中reshape后数据排列方式

    技术2022-07-10  134

    python中reshape后数据排列方式

    1. 序言2. 如何手动计算2.1 针对order="C"2.2 验证2.2 针对order="F"

    1. 序言

    在python中,我们可能会接触numpy或者pytorch,tensorflow等,在这些库或者框架中,他们都有reshape方式,通过reshape可以将给定维度的数组换成另外一个维度。当在使用的时候,如果不清楚原理,我们可能会使用错并且还没那么容易发现自己的错误。

    2. 如何手动计算

    2.1 针对order=“C”

    对于任意维度的一个数组,我们可以先按照flatten方式将任意维度数组转为1维数组,然后再转换到指定的维度即可。 注意:在转换过程中,转换后的数组元素的个数必须和转换前数组元素的个数一样,对于-1,则表示将剩余元素都分配到那个轴 例如: [[[[5, 3, 9, 2, 1], [6, 2, 0, 0, 1], [6, 2, 6, 5, 7]], [[0, 8, 1, 1, 6], [2, 8, 2, 0, 7], [7, 4, 3, 0, 8]]]] 该数组的维度是(1, 2, 3, 5),想reshape成指定维度数组,则 a. 展开(flatten) [5, 3, 9, 2, 1, 6, 2, 0, 0, 1, 6, 2, 6, 5, 7, 0, 8, 1, 1, 6, 2, 8, 2, 0, 7, 7, 4, 3, 0, 8] b. 从中按顺序选取数组变成3 × 10 [[5, 3, 9, 2, 1, 6, 2, 0, 0, 1], [6, 2, 6, 5, 7, 0, 8, 1, 1, 6], [2, 8, 2, 0, 7, 7, 4, 3, 0, 8]]

    c. 变成3 × 1 × 10 [[[5, 3, 9, 2, 1, 6, 2, 0, 0, 1]], [[6, 2, 6, 5, 7, 0, 8, 1, 1, 6]], [[2, 8, 2, 0, 7, 7, 4, 3, 0, 8]]]

    d. 变成3 × 5 × 2 [[[5, 3], [9, 2], [1, 6], [2, 0], [0, 1]], [[6, 2], [6, 5], [7, 0], [8, 1], [1, 6]], [[2, 8], [2, 0], [7, 7], [4, 3], [0, 8]]]

    e. 变成(-1, 5) 这个实际上变成(30 / 5, 5),故数组元素如下 [[5, 3, 9, 2, 1], [6, 2, 0, 0, 1], [6, 2, 6, 5, 7], [0, 8, 1, 1, 6], [2, 8, 2, 0, 7], [7, 4, 3, 0, 8]]

    2.2 验证

    2.2 针对order=“F”

    当使用该方式变化时,依旧可以使用flatten方式理解,只不过在flatten时,需要指定flatten的order=“F”,然后维度越高,越先被转换。

    参考博客:https://zhuanlan.zhihu.com/p/72381219

    Processed: 0.012, SQL: 9