我有这个函数,我在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
虽然patientLng
和patientLat
在每次迭代时都相同,但dev
和index
会发生变化。我真的很困惑,我可以如何矢量化这段代码。
到目前为止,我认为我不再需要发送dev
和index
号码了。
contactX
和contactY
列出numpy数组?然后我如何逐个实际检查结果呢? latVect
和lngVect
会立即成为numpy数组吗? 一些建议将受到高度赞赏!
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,但我仍然得到错误。