Python numpy shape为(x,) 和 shape为(x,1)的区别

您所在的位置:网站首页 一旦和一但有何区别 Python numpy shape为(x,) 和 shape为(x,1)的区别

Python numpy shape为(x,) 和 shape为(x,1)的区别

2024-05-23 22:48| 来源: 网络整理| 查看: 265

Python numpy shape为(x,) 和 shape为(x,1)的区别

笔者最近在用numpy进行ML的学习,numpy确实方便,但是如果不仔细的话,还是会栽不少跟头,所以笔者在这里记录下遇到过的坑,方便大家学习。

稍微一看,shape为(x,)和shape为(x,1)几乎一样,都是一维的形式。其实不然:

(x,)意思是一维数组,数组中有2个元素(x,1)意思是一个x维数组,每行有1个元素

这涉及到一个张量的概念,具体可以看:小昇的博客-Keras深度学习笔记(二):神经网络的数学基础

这里举几个例子来说明不重视这个点的危害。

初始化 a = np.arange(3) print("a=" ,a.shape) b = np.arange(15).reshape(5,3) print("b=" ,b.shape)

输出:

a= (3,) b= (5, 3)

可以看出,没有指明矩阵形式的时候,默认是一维数组。

相乘 c = np.dot(b,a) print("c=" ,c.shape)

输出:

c= (5,)

矩阵乘法,因为a是一维的形式,所以b相乘之后,维数减少。

自身变化 c.reshape(c.shape[0],1) print("c=" ,c.shape) ff = c.reshape(c.shape[0],1) print("ff=" ,ff.shape)

输出

c= (5,) ff= (5, 1)

这里要注意的是,对自己reshape并不会改变自身的形式!只有赋值给其他变量才会看见效果。这很重要!

相加 c = np.arange(5) print("c=" ,c.shape) d = np.arange(5).reshape(5,1) print("d=" ,d.shape) e = c + d print("c+d=" ,e.shape)

输出:

c= (5,) d= (5, 1) c+d= (5, 5)

一开始以为c会作用于d上的每个数据,直接相加,最后结果还是(5,1)。但是没想到会变成(5,5)这是矩阵相加最需要注意的地方

正确相加 c = np.arange(5) print("c=" ,c.shape) ff = c.reshape(c.shape[0],1) print("ff=" ,ff.shape) d = np.arange(5).reshape(5,1) print("d=" ,d.shape) e = ff + d print("ff+d=" ,e.shape)

输出:

c= (5,) ff= (5, 1) d= (5, 1) ff+d= (5, 1)

正如前面所说,需要先赋值给其他变量,然后再相加,此时才会得出正确结果。

小结:这个小细节曾连续困扰了我好几天,代码一直显示矩阵操作的维数不对,一点点调试才发现了这个问题。如果维数不对,那么结果也一定不对。希望和大家一起学习分享经验!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3