>

두 번째 numpy 배열의 요소가 첫 번째 배열에있을 때를 나타내는 부울 배열을 얻는 데 문제가 있습니다.

어려운 부분은 각 배열이 위도/경도 쌍으로 구성되어 있으며 두 번째 좌표의 각 위도/경도가 첫 번째 좌표에도 있는지 확인하고 싶습니다. 그래서 이것은 교차점과 같습니다

여기까지 내가 한 일이 있습니다 (작은 예제 좌표로) :

firstlat = [0, 1, 5, 5]
firstlon = [1, 0, 5, 4]
secondlat = [0, 2, 0, 5]
secondlon = [1, 2, 5, 5]
firstcoords = numpy.array((firstlat, firstlon))
firstcoords = numpy.transpose(firstcoords) # gets lat/lon pair

secondcoords = numpy.array((secondlat, secondlon))
secondcoords = numpy.transpose(secondcoords)
a = numpy.isin(secondcoords, firstcoords)
Wrong output:
[[ True  True]
[False False]
[ True  True]
[ True  True]]
Wanted output: [[True, False, False, True]]

Numpy is in arguments를 평평하게하기 때문에 firstcoords[0] = [0 1] , "요소 별"을 잘못 비교하는 것 같습니다. 그러나 내가 본 것처럼 각 요소는 [lat lon] 로 구성됩니다. ;그것을 바꾸는 목적은 lat / lons 를 얻는 것이 었습니다.  쉬운 비교를 위해 튜플 또는 튜플과 같은 형태로. 그렇다면 내 접근 방식을 어떻게 수정합니까?이 문제에 대해 다른 접근 방식이 가능합니까?


  • 답변 # 1

    위도와 경도를 튜플로 압축하는 경우 :

    firstlat = [0, 1, 5, 5]
    firstlon = [1, 0, 5, 4]
    secondlat = [0, 2, 0, 5]
    secondlon = [1, 2, 5, 5]
    first_lat_lon = list(zip(firstlat,firstlon))
    second_lat_lon = list(zip(secondlat,secondlon))
    
    

    그러면 두 번째 목록 중 첫 번째 목록을 쉽게 확인할 수 있습니다.

    [x in first_lat_lon for x in second_lat_lon]
    
    

    반환 :

    [True, False, False, True]
    
    

  • 답변 # 2

    귀하가 원하는 기능이 무수히 가능하다는 것을 모르겠습니다. 다음을 사용하는 것이 좋습니다.

    in_second_and_first = set(zip(secondlat,secondlon)) & set(zip(firstlat,firstlon))
    
    

    파이썬 2를 사용하고 있다면 (권장 할 것이지만) itertools.izip 를 사용하십시오.  내장 zip 대신 .

  • 답변 # 3

    isin 를 활용하기위한 하나의 핵  배열은 실제로 1 차원이 아니지만 구조적 배열을 사용하는 것입니다.

    firstlat = [0, 1, 5, 5]
    firstlon = [1, 0, 5, 4]
    secondlat = [0, 2, 0, 5]
    secondlon = [1, 2, 5, 5]
    firstcoords = np.array(list(zip(firstlat, firstlon)), dtype=[("lat", int), ("lon", int)])
    # array([(0, 1), (1, 0), (5, 5), (5, 4)], dtype=[('lat', '<i8'), ('lon', '<i8')])
    secondcoords = np.array(list(zip(secondlat, secondlon)), dtype=[("lat", int), ("lon", int)])
    # array([(0, 1), (2, 2), (0, 5), (5, 5)], dtype=[('lat', '<i8'), ('lon', '<i8')])
    np.isin(secondcoords, firstcoords)
    # array([ True, False, False,  True])
    
    

    참조

    Numpy가 각 행/텐서를 값으로 취급하게하는 방법

    두 개의 2D numpy 배열에서 교차하는 행 가져 오기

관련 자료

  • 이전 node.js - localhost에서 Botbuilder 봇의 응답이 없지만 Azure에서 작동
  • 다음 string - 명시 적으로 변환하지 않고 입력을 정수로 읽는 방법은 무엇입니까?