일부 고속 푸리에 변환 (기술적으로 Discrete Fourier Transform)의 계수에 대한 분류에 일부 Sklearn 추정량을 사용하려고합니다. 나는 nump 배열 X_c를 np.fft.fft (X)의 출력으로 얻었고 원래의 X_c의 각 (복합) 열이 두 개의 (실수/부동 소수점) 열로 변환 된 실제 열등 배열 X_r로 변환하려고합니다. X_r, 즉 모양이 (r, c)에서 (r, 2c)로 이동합니다. 그래서 .view (np.float64)를 사용합니다. 그것은 처음에는 작동합니다.하위 집합이 .view (np.float64) 동작에 영향을 미침
문제는 처음에 X_c2 = X_c [:, range (3)]를 사용하여 원본 복합 배열의 일부 계수 만 유지 한 다음 이전과 동일한 작업을 수행하는 대신 열 수 두 배로 늘리면 순위의 수를 두 배로 늘릴 수 있습니다 (각 요소의 허수 부는 원본 아래에 새로운 행에 넣어집니다).
나는 왜 이런 일이 발생하는지 정말로 이해하지 못합니다.
이import numpy as np
# I create a complex array
X_c = np.arange(8, dtype = np.complex128).reshape(2, 4)
print(X_c.shape) # -> (2, 4)
# I use .view to transform it into something real and it works
# the way I want it.
X_r = X_c.view(np.float64)
print(X_r.shape) # -> (2, 8)
# Now I subset the array.
indices_coef = range(3)
X_c2 = X_c[:, indices_coef]
print(X_c2.shape) # -> (2, 3)
X_r2 = X_c2.view(np.float64)
# In the next line I obtain (4, 3), when I was expecting (2, 6)...
print(X_r2.shape) # -> (4, 3)
사람이 행동의 차이에 대한 이유를 수행합니다
자신을 명확하게하기 위해, 여기에 장난감 예입니다?
고급 인덱싱 문서는 다음과 같이 보입니다. [고급 인덱싱 결과의 메모리 레이아웃은 각 인덱싱 작업에 최적화되어 있으며 특정 메모리 순서는 가정 할 수 없습니다.] (https://docs.scipy.org/doc /numpy-1.13.0/reference/arrays.indexing.html#detailed-notes) – user2357112
결과에 대한 특정 메모리 순서를 보장하려면'numpy.asarray (result, order = 'C')'가 일. 'numpy.array (result, order = 'C', copy = 'False')'도 작동합니다; 약간 더 근사하지만 약간 더 문서와 일치합니다. – user2357112
'numpy.ascontiguousarray (result)'도 있는데, 이는 C 연속 배열을 보장합니다 (연속하지 않는 Fortran). – user2357112