2014-02-24 3 views
1

나는 floats 배열을 가지고 있는데, 그걸 int에 넣고 싶습니다.Numpy 배열의 적절한 위치 변환을 다시 하시겠습니까?

a1 = np.ones(10) 
a2 = a1.astype(int, copy=False) 
a2.dtype # int 
a1.dtype # float 

여기서는 어떻게됩니까? 나는 astype(int, copy=False)이 타입 인 플레이스를 캐스팅 할 것이라고 생각했습니다. 그러나 그렇게 보이지는 않습니까?

관련 질문 : copy argument documentation 가입일 In-place type conversion of a NumPy array

+0

순수한 파이썬'int'과'np.float64' 사이의 크기 차이로 인한 것일 수 있다고 생각했지만'np.int64'로 시도했지만 작동하지 않았습니다. – wim

+0

여기에서 읽기 시작하십시오 : https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/methods.c#L784 – wim

답변

2

:

이 false로 설정되고, 만족되는 DTYPE 순서 및 subok 요구, 입력 배열이 아닌 반송되면 부.

실제로 유형을 변환 할 수 없습니다. 입력 배열이 이미 원하는 dtype 인 경우에만 작동합니다. 그렇지 않으면 어쨌든 사본을 만들어야합니다.

+0

이게 맞는 것 같아요,하지만 'astype'을 바꿀 수 있다면 'dtype'이 아닌가? – wim

+0

@wim : 원본이 이미 원하는대로 정확히 표시되는 경우에만 새 배열 만들기를 피할 수 있습니다. 새 배열을 만들 때 dtype, 메모리 순서 및 특정 배열 하위 클래스를 변경할 수 있습니다. – user2357112

+0

알 수없는 유형의 배열 객체가 있고 특정 객체로 캐스팅해야하는 경우 불필요한 복사를 피하는 간단한 방법입니다. 이것은 아마도 파이썬에서 numpy를 사용하여 필요한 작업이 아니기 때문에 형식에 관계없이 동일한 작업을 수행 할 수 있지만 numpy의 C 내부에서 항상 수행되는 작업을 볼 수 있습니다. – Jaime