spherepts > Delaunay > Scipy를 Delaunay로 바꾸어도 같은 결과가 발생합니다 (적용 문제로 인한 것)

운영 환경
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.2.1
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
scipy v0.19.1
geopandas v0.3.0
MATLAB R2017b (Home Edition)

개요



Scipy > API > Delaunay 시도 > Qhull 옵션이 MATLAB과 다릅니다.

위에서 궁금했던 것이 MATLAB의 delaunay()와 Scipy의 Delaunay()의 결과의 차이.
Qhull의 옵션을 Qz 없이 실행하려고 해도, 취급하고 있는 문제가 cospherical인 포인트 세트이기 때문에, Qz 없이는 Scipy로 에러가 나온다.
또, Qz 이외의 이유에 의해서도 양자에 차이가 나오고 있다고 추측된다.

I have a hunch that...
Scipy의 결과를 MATLAB에 읽어 최종 결과에 차이가 있는지 확인하기로 했다.

처리 절차


  • MATLAB의 처리에 있어서 delaunay(x)의 x를 파일 출력한다
  • 출력 파일 : delaunay_input_171118.txt

  • Scipy로 파일을 읽어 Delaunay()의 결과를 파일 출력한다
  • 출력 파일: out_delaunay_171119.txt

  • MATLAB 처리에서 2 단계의 파일을 읽고 계속 처리합니다.

    순서 1에서는 save()를 사용한다. 순서 3에서 load()를 사용한다.

    순서 2의 코드는 아래와 같다.

    delaunay_save_171119.py
    import numpy as np
    from scipy.spatial import Delaunay
    
    '''
    v0.2 Nov. 19, 2017
      - add convert_to_matlab_index()
    v0.1 Nov. 19, 2017
      - add delaunay_save()
    '''
    
    
    def convert_to_matlab_index(dln):
        return (dln + 1)
    
    
    def delaunay_save(xyz):
        dln = Delaunay(xyz).simplices
        dln = convert_to_matlab(dln)
        np.savetxt('out_delaunay_171119.txt', dln, fmt='%.0f')
        return dln
    
    
    if __name__ == '__main__':
        IN_FILE = 'delaunay_input_171118.txt'
        xyz = np.genfromtxt(IN_FILE, delimiter='  ')
        print("---xyz---")
        print(xyz)
    
        print("---dln---")
        dln = delaunay_save(xyz)
    
        print(dln)
    
    

    실행



    @ozwk 님에게 가르쳐 주셨습니다. isequal() 을 사용했습니다.

    정보 감사입니다.
    >> [x0,tri0] = getIcosNodes(4,0);
    >> [x1,tri1] = getIcosNodes_load(4,0);
    >> isequal(x0,x1)
    
    ans =
    
      logical
    
       1
    

    동일합니다.
    양자를 그림으로 목시해도 위화감은 느끼지 않는다.





    MATLAB과 Scipy의 Delaunay()의 차이에 대해서는, 내가 대상으로 하고 있는 문제에서는 최종 결과에 영향을 주지 않는 것 같다.

    다른 문제에 따라 최종 결과에 영향을 줄 수 있습니다.

    보충 자료



    delaunay_input_171118.txt
       0.0000000e+00   8.5065081e-01   5.2573111e-01
       0.0000000e+00  -8.5065081e-01   5.2573111e-01
       0.0000000e+00   8.5065081e-01  -5.2573111e-01
       0.0000000e+00  -8.5065081e-01  -5.2573111e-01
       5.2573111e-01   0.0000000e+00   8.5065081e-01
      -5.2573111e-01   0.0000000e+00   8.5065081e-01
       5.2573111e-01   0.0000000e+00  -8.5065081e-01
      -5.2573111e-01   0.0000000e+00  -8.5065081e-01
       8.5065081e-01   5.2573111e-01   0.0000000e+00
      -8.5065081e-01   5.2573111e-01   0.0000000e+00
       8.5065081e-01  -5.2573111e-01   0.0000000e+00
      -8.5065081e-01  -5.2573111e-01   0.0000000e+00
    

    out_delaunay_171119.txt
    8 12 6 2
    8 11 4 2
    8 1 6 5
    8 3 7 9
    8 11 5 2
    8 6 5 2
    8 1 6 10
    8 12 4 2
    8 11 4 7
    8 12 6 10
    8 1 3 9
    8 11 5 9
    8 11 7 9
    8 1 3 10
    8 1 5 9
    
  • 좋은 웹페이지 즐겨찾기