从另一个张量元素明智地将Numpy减去元素

时间:2019-04-24 15:51:23

标签: python numpy

我不确定如何为我的问题加上标题。我只知道broadcastingelement wise这两个术语。如果不正确,请更正我的标题。

背景
以前我从事文本检测。但是,检测到的图片要小一些,我无法从cropped image获取全部信息。我了解我正在使用基于英语的分类器进行单词检测。

因此,对于重叠的泰语句子,我必须微调裁剪的坐标。这是裁切区域较小的示例。您会看到标点符号和音调符号已部分丢失

cropped picture

我有3个正方形,称为pts

ipdb> pts
array([[[ 436, 3085],
        [2968, 3081],
        [2968, 3227],
        [ 436, 3232]],

       [[1222,  397],
        [1833,  400],
        [1833,  498],
        [1221,  496]],

       [[  86, 3275],
        [2968, 3268],
        [2968, 3421],
        [  87, 3427]]], dtype=int32)
ipdb> pts.shape
(3, 4, 2)

后来我进行了计算以找到它们的中心 np.sum(pts, axis=1) / 4.0。我把它放到center_pts

ipdb> center_pts
array([[1702.  , 3156.25],
       [1527.25,  447.75],
       [1527.25, 3347.75]])
ipdb> center_pts.shape
(3, 2)

最终目标:
我想覆盖丢失的标点符号和语气符号

尝试:
我正在尝试进行减法运算,以从正方形的中心指向每个角进行矢量参考。并以较小的倍数覆盖裁切图像的丢失部分。

我的第一个想法是牺牲一个for循环,并明智地使用element来利用像这样的广播。

pts[0] - center_pts[0]
array([[-1266.  ,   -71.25],
       [ 1266.  ,   -75.25],
       [ 1266.  ,    70.75],
       [-1266.  ,    75.75]])

vectors pointing to 4 corners

问题:
1.不使用for-loop就能做到吗?
2.他们在扩大我的面积方面是否更有生产力?

1 个答案:

答案 0 :(得分:0)

这可以在broadcasting的帮助下完成:

pts - center_pts[:,None]

array([[[-1266.  ,   -71.25],
        [ 1266.  ,   -75.25],
        [ 1266.  ,    70.75],
        [-1266.  ,    75.75]],

       [[ -305.25,   -50.75],
        [  305.75,   -47.75],
        [  305.75,    50.25],
        [ -306.25,    48.25]],

       [[-1441.25,   -72.75],
        [ 1440.75,   -79.75],
        [ 1440.75,    73.25],
        [-1440.25,    79.25]]])