프로젝트

일반

사용자정보


Nerv 배열의 python numpy 응용

numpy 변수가 Nerv 배열에 직접 엑세스하여 쓰는 방법입니다.

        data = nerv.struct_SensorData_LIDAR_XYZ()

        # 6개의 값을 저장할수 있는 공간을 할당합니다.
        data.LayerAngle_alloc(6)

        # Raw 메모리를 (1: write , 0: read) 권한으로 가져옵니다.
        LayerAngle_write = data.LayerAngle_memory(1)

        # LayerAngle배열은 본래 float32 배열 형태입니다.
        # raw메모리에서 float32 타입의 행렬크기 (6)인 일차원배열로부터 numpy 변수를 얻어옵니다.
        LayerAngle_write_numpy = numpy.frombuffer(LayerAngle_write, dtype=numpy.float32).reshape(6, order='C')

        # numpy변수를 이용하여 조작합니다.
        # 이때 numpy변수의 데이터 버퍼는 data.LayerAngle_memory(1)로 얻어온 data변수의 raw 메모리를 가리키고 있기 때문에
        # numpy변수에서 data변수로 데이터를 전달할 필요가 없습니다.
        LayerAngle_write_numpy[0] = 3.14;
        LayerAngle_write_numpy[1] = 4.14;
        print( "[0] = " , LayerAngle_write_numpy[0])
        print( "[1] = " , LayerAngle_write_numpy[1])

원래 있던 numpy 배열을 nerv 배열에 저장하는 방법입니다.

        # 6원 1차원 배열 numpy 변수를 만들고 값을 조작합니다.
        nvar = numpy.zeros( (6) )
        nvar[0] = 3.14
        nvar[1] = 4.14

        # Nerv 변수를 선언합니다.
        data = nerv.struct_SensorData_LIDAR_XYZ()

        # 6원의 float형식의 LayerAngle 배열을 할당합니다.
        data.LayerAngle_alloc(6)

        # Raw 메모리를 (1: write , 0: read) 권한으로 가져옵니다.
        LayerAngle_write = data.LayerAngle_memory(1)

        # numpy 배열을 nerv 배열에 저장합니다.
        LayerAngle_write[0: numpy.float32().nbytes*6 ] = numpy.array(nvar, dtype=numpy.float32).tobytes('C')

numpy 변수가 Nerv 배열에 직접 엑세스하여 읽는 방법입니다.

        # Read를 위한 과정은 Write와 동일합니다.
        # 단 쓰기만 오류 입니다.

        # Raw 메모리를 (1: write , 0: read) 권한으로 가져옵니다.
        LayerAngle_read = data.LayerAngle_memory(0) # 1: write , 0: read

        # LayerAngle배열은 본래 float32 배열 형태입니다.
        # raw메모리에서 float32 타입의 행렬크기 (6)인 일차원배열로부터 numpy 변수를 얻어옵니다.
        LayerAngle_read_numpy = numpy.frombuffer(LayerAngle_read, dtype=numpy.float32).reshape(6, order='C');

        # 메모리를 읽기 모드로 가져왔기 때문에 쓰기는 오류입니다.
        # LayerAngle_read_numpy[0] = 3.14; # 오류
        # LayerAngle_read_numpy[1] = 4.14; # 오류

        # 저장된 값을 출력합니다.
        print( "[0] = " , LayerAngle_read_numpy[0])
        print( "[1] = " , LayerAngle_read_numpy[1])