【NumPy】数组的维度变换在DL|ML数据集处理时的妙用

记录

        近日老师布置的作业中提供了一个csv文件,里面有59列,其中前面58个是数据的属性,也就是决定该某个该数据数据类别的58个变量,最后列是该数据的分类结果。比如:同样的数字手写体“1”和“8”,他们的属性就是形状、粗细等,类别就是对应的1, 8。

        但是当我读取完数据并且划分好了数据集,打印出训练集的shape是这样的:(28,2760)——(数据维度+数据数量)很明显这是错误的,那么该如何解决呢?


【NumPy】数组的维度变换在DL|ML数据集处理时的妙用

记录

正文 

np,swapaxes——交换维度!


正文 

        众所皆知:对于投喂给模型(fit操作)的X(数据),Y(标签)中的X,不论是深度学习还是机器学习格式都是这样的:第一个维度都是数量,后面的维度是数据的维度,也就是数据数量+数据维度的格式。

        比如:Mnist数据中的X.shape=(70000, 28, 28)正是说有7W个(28,28)的数据,所以毫无疑问我的数据集X必须是(2760,28)——(数据数量+数据维度)而不是(28, 2760)——(数据维度+数据数量)。

       最后有一点差点忘记讲的是:数据集一般都是np.array的格式。


np,swapaxes——交换维度!

        这个时候就终于轮到我们的正主:np,swapaxes登场啦!

方法 说明
numpy.swapaxes(array,ax1,ax2) 将数组array的维度ax1和维度ax2的数据进行调换

        刚刚我们提到,现在的数据是(数据维度+数据数量),而我的数据维度毫无疑问只是简单的1,所以说解决的办法显而易见:交换数据集维度1和维度0!

        那我们该如何去做呢?第一反可能会是用for循环之类的暴力交换,实际上,我们不需要这么麻烦,我也是想到了numpy的作者考虑到了维度交换的问题,会有这样一个函数,一查果然有!所以我们只需要在处理完数据集后对x_trian和x_test做以下操作: 

x_train = np.swapaxes(x_train, 0, 1)
x_test = np.swapaxes(x_test, 0, 1)

便可以达到我们的目的。

当然还有一种特别的情况: 就是我们的数据集是一维的,这个样子就更简单了,我们只需要:

x_train = x_train.reshape(-1,1)

除此之外,还有一些函数也会起到作用,在此处一一列出来,供大家参考使用!

猜你喜欢

转载自blog.csdn.net/qq_51831335/article/details/127595006