我在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数组?你知道吗如有任何建议,我们将不胜感激!你知道吗
另外,_data
属性是一个数据帧对象。你知道吗
编辑:我已经把这部分代码移到函数之外了
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公司但我还是得到了错误。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐