Python矢量化代码

时间:2018-03-26 08:45:48

标签: python numpy vectorization

我有这个函数,我在for循环中调用。它是医院项目的联系人追踪功能。基本上,它计算两组坐标的x和y坐标之间的距离,在这种情况下是患者。功能如下:

def inContact(patientID, patientLng, patientLat, dev, index, _data, mapScale, distance):
    contact = []
    contactX = _data.loc[dev, 'Beacon Longtitude'].tolist()
    contactY = _data.loc[dev, 'Beacon Latitude'].tolist()
    latVect = math.fabs(float(patientLng[index]) - float(contactX[index])) * int(mapScale)
    lngVect = math.fabs(float(patientLat[index]) - float(contactY[index])) * int(mapScale)
    if latVect < distance and lngVect < distance:
        contact.append(contactX[index])
        contact.append(contactY[index])
        return True, contact
    return False, contact

虽然patientLngpatientLat在每次迭代时都相同,但devindex会发生变化。我真的很困惑,我可以如何矢量化这段代码。

到目前为止,我认为我不再需要发送devindex号码了。

  1. 那么我是否要使contactXcontactY列出numpy数组?然后我如何逐个实际检查结果呢?
  2. latVectlngVect会立即成为numpy数组吗?
  3. 一些建议将受到高度赞赏!

    P.S。 _data属性是pandas数据框对象。

    编辑:我已将这部分代码移到函数

    之外
    if latVect < distance and lngVect < distance:
        contact.append(contactX[index])
        contact.append(contactY[index])
        return True, contact
    return False, contact
    

    该功能现在如下所示:

    contactX = np.array(_data.loc[dev, 'Beacon Longtitude'].tolist())
    contactY = np.array(_data.loc[dev, 'Beacon Latitude'].tolist())
    patientX = np.array(patientLng)
    patientY = np.array(patientLat)
    latVect = np.abs(float(patientX) - float(contactX)) * int(mapScale)
    lngVect = np.abs(float(patientY) - float(contactY)) * int(mapScale)
    return latVect, lngVect
    

    然而,现在我得到错误:只有length-1数组可以转换为python标量到行

    latVect = np.abs(float(patientX) - float(contactX)) * int(mapScale) 
    

    任何人都知道为什么?我在网上看到numpy矢量化不能接受数学函数,所以我把它改成了np.abs,但我仍然得到错误。

0 个答案:

没有答案