작업
numpy array를 ctypes으로 c++에서 사용하는 데, 비상식적으로 동작할 때
저녁추천좀
2022. 10. 25. 22:46
numpy array는 기본값으로 메모리 상에서 연속적(contigous)이지 않으니
x = np.ascontiguousarray(x)
를 해줘야 c++에서 받았을 때, 상식적으로 동작한다.
numpy array -> c++ double ** -> numpy array
를 ctypes 으로 하는데
계속 앞쪽만 나오고 뒤쪽이 짤려서 나왔다.
그래서 데이터 처리 없이
그냥 복사만 했는데도
같은 현상이 발생 했다.
근데 index를 7배로 하면 데이터가 잘 간다. (7, 33216) array, 근데 그러면 아무리 생각해도 메모리 범위 넘어가는데 돌아가는것도 이상하고 그게 안터지는 것도 이상하고
포인터 다 찍어보고 메모리 복사 방식 참조 방식 다 바꿔봤는데 그대로였다.
아무리 생각해봐도 말도 안되는 상황인 와중에
C++단에서 데이터는 온전한걸 확인해서 ctypes 문젠가 하고 검색해보는데
flags['C_CONTIGUOUS']
이라는 키워드를 보고
설마 설마 어레이가 메모리상에서 연속이 아닌가 싶었는데..
연속이 아니었다.
x = np.ascontiguousarray(x)
를 해줘야 상식적으로 메모리상에 저장된다.
이전에는 어레이가 그렇게 크지 않아서, (8,1024) 정도, 사용하는데 문제가 없었던것 같다.