吴恩达深度学习广播一维数组(n,)与二维矩阵(n,1)区别

1. 实验

最近学习吴恩达大大的深度学习教程第二周2.15节数组广播相关内容时,实验研究了一下。
吴恩达课程广播课件截图
上图为吴恩达教授总结的使用numpy广播的注意事项,经过研究,有些收获。实验如下:

#构建a,b,c,d 4个变量
import numpy as np

a=np.arange(1,13,1)
a=a.reshape(3,4)  ###构建3行4列的数组,后面计算有用

b=np.array([1,2,3,4])

c=np.mat([1,2,3,4])

d=b.reshape(1,4)

接下来分别打印4个变量看一下:

print("a,b,c,d依此为:\n",a,"\n++++++++++\n",b,"\n++++++++++\n",c,"\n++++++++++\n",d)
#打印结果:
a,b,c,d依此为:
 [[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]] 
++++++++++
 [1 2 3 4] 
++++++++++
 [[1 2 3 4]] 
++++++++++
 [[1 2 3 4]]

b跟c相差一对方括号,c跟d打印结果完全一样。
接下来咱们依次打印变量类型:

print(type(a),a.shape)   ### <class'numpy.ndarray'>  reshape后的a仍为数组(3,4)
print(type(b),b.shape)   ###<class 'numpy.ndarray'>  (4,)
print(type(c),c.shape)   ###<class 'numpy.matrix'>    (1, 4)
print(type(d),d.shape)   ###<class 'numpy.ndarray'> (1, 4)

2.结果说明

以上结果表明:变量c是二维矩阵(shape有2个数,且矩阵有两个[[ ),变量d是二维数组,变量b是一维数组(shape有1个数,且数组有1个[ ),

接下来用变量a分别跟b、c、d进行相乘(可以广播)、相加(可以广播)、求哈达玛积(同型矩阵对应元素相乘),以研究各种变量的性质:

###a与b的计算

print(a*b) 				###结果为(3X4)
print(a+b)
print(np.dot(a,b))    ###广播全部成功,运算结果为(1X3数组)

print("vs")
####a与d的计算
print(a*d)
print(a+d)               ###广播成功
print(np.dot(a,d))   ###报错,不符合点积运算规则

####a与c的计算

print(a+c)              ###广播成功
print(a*c)               ###报错,广播失效
print(np.dot(a,c))   ###报错,不能进行点积运算

以上代码大家可以试一下,看运行结果跟我的一样不。

3.总结

通过上面的计算代码,我个人认为:
1.数组广播,是指数组之间在进行加减乘除四则运算时数据的复制。这里的乘运算 是哈达玛积
2.当我们使用np.array([1,2,3,4])构造数组时,是将列表转为数组,默认的shape就是(4,),所以用reshape()函数重塑形状真的很有必要。

纯手打,不对的地方希望各位批评指正。转载请注明本博客地址!

  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值