在numpy中,'+' 和add 是一样的
np.add(x1, x2)
x1+x2
有种特殊情况需要注意,x1和x2的shape不一样的加法:
两个shape不一样的array相加后会变成一个common shape
>>> x1 = np.arange(9.0).reshape((3, 3)) >>> x2 = np.arange(3.0) >>> np.add(x1, x2) array([[ 0., 2., 4.], [ 3., 5., 7.], [ 6., 8., 10.]])
x1是3x3的,x2是1x3的,加了之后就变成3x3,实际上是把x2在x1的第一维上加了3次
faster rcnn中的rpn的生成也有类似的代码:
all_anchors = (self._anchors.reshape((1, A, 4)) +shifts.reshape((1, K, 4)).transpose((1, 0, 2)))
self._anchors是1x9x4
shifts是2379x1x4
在第一维,self._anchors把9x4和shifts的2379个相加
在第一维的条件下,进行第二维计算。在第二维,shifts把每一个x4和self._anchors的9个相加。
在第二维的条件下,再进行第三维的计算。