踩坑记----numpy.array,shape为(m,1)和(m,)的区别

在我们使用numpy跟tensorflow时,时常会遇到这个坑,而这个坑又不容易发现,比如当我们使用y-y'时,时常就会踩进这个坑。

直接上例子:

import numpy as np
arr1 = np.array([1,2,3])
arr2 = np.array([[1],[2],[3]])
print (arr1.shape,arr2.shape)
#### 输出为:((3,), (3, 1))
arr3 = np.array([1,1,1])
arr4 = np.array([[1],[1],[1]])
print (arr3.shape,arr4.shape)
#### 输出为:((3,), (3, 1))

### 接下来进行减法运算
print (arr1 - arr3)
#### 输出为:[0 1 2]
print (arr2 - arr3)
#### 输出为:[[0 0 0][1 1 1][2 2 2]]
print (arr1 - arr4)
#### 输出为:[[0 1 2][0 1 2][0 1 2]]
print (arr2 - arr4)
#### 输出为:[[0][1][2]]

可见,numpy进行加减法计算的时候是参照最里面的一层进行加减法运算,arr1最里层的大小为3,而arr2最里层的大小为1,

所以当arr2大小为1的数组减去arr3大小为3的数组时,arr2会临时被扩增到大小为3的数组再进行运算。

而当arr1大小为1的数组减去arr4大小为1的数组时,arr4也会临时复制自身的值扩增到大小为3的数组在进行运算。

 

所以当我们进行加减法运算时,要特别注意维度shape的对应。特比是使用tensorflow的时候,比如下面的例子:

cost = tf.reduce_mean(tf.square(y - ))
这时我们常常使用计算损失的方法,当y与y_的维度不一致时,则会出现错误而且不好发现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿也可以很哲学

让我尝下打赏的味道吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值