踩坑记----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_的维度不一致时,则会出现错误而且不好发现。

你可能感兴趣的:(tensorflow,Python)