以下两个重塑函数在numpy中的区别是什么?

问题描述 投票:0回答:1

我正在构建一个神经网络,我必须将我的训练数据集扁平化。

我有两个选择。1是:

train_x_flatten = train_x_orig.reshape(train_x_orig.shape[0], -1).T

第二种是:

 train_x_flatten = train_x_orig.reshape(train_x_orig.shape[1]*train_x_orig.shape[2]*train_x_orig.shape[3], 209)

两个都是一样的形状,但是我在计算成本的时候发现了区别,为什么呢,谢谢你。

python numpy neural-network
1个回答
1
投票

根据第二个例子,你的原始张量至少是4级。 第一个例子拉出每个元素,按增加最右边的索引排序,并将元素插入到长度为第零个形状的行中。 然后进行转置。

第二个例子又从最右边的索引递增的方式拉出元素,即。

element = train_x_orig[0, 0, 0, 0]
new_row.append(element)
element = train_x_orig[0, 0, 0, 1]
new_row.append(element)

但行的大小不同。 现在是张量中其他一切元素的尺寸。

下面是一个例子来说明。

首先我们创建一个有序数组,并将其重塑为4级。

import numpy as np

x = np.arange(36).reshape(3,2,3,2)
x
# returns:
array([[[[ 0,  1],
         [ 2,  3],
         [ 4,  5]],

        [[ 6,  7],
         [ 8,  9],
         [10, 11]]],


       [[[12, 13],
         [14, 15],
         [16, 17]],

        [[18, 19],
         [20, 21],
         [22, 23]]],


       [[[24, 25],
         [26, 27],
         [28, 29]],

        [[30, 31],
         [32, 33],
         [34, 35]]]])

下面是第一个例子的输出

x.reshape(x.shape[0], -1).T
# returns:
array([[ 0, 12, 24],
       [ 1, 13, 25],
       [ 2, 14, 26],
       [ 3, 15, 27],
       [ 4, 16, 28],
       [ 5, 17, 29],
       [ 6, 18, 30],
       [ 7, 19, 31],
       [ 8, 20, 32],
       [ 9, 21, 33],
       [10, 22, 34],
       [11, 23, 35]])

这里是第二个例子

x.reshape(x.shape[1]*x.shape[2]*x.shape[3], -1)
# returns:
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11],
       [12, 13, 14],
       [15, 16, 17],
       [18, 19, 20],
       [21, 22, 23],
       [24, 25, 26],
       [27, 28, 29],
       [30, 31, 32],
       [33, 34, 35]])

元素如何重新排序是根本不同的。

© www.soinside.com 2019 - 2024. All rights reserved.