2017-05-19 7 views
2

비슷한 질문이 있지만 문제가 해결되지 않은 항목이 있으므로 여기에 새 질문을 게시하고 있습니다.Cython ValueError : 버퍼의 치수 수가 잘못되었습니다 (예상 2, 획득 3)

Cython은 "ValueError : 버퍼의 차원 수가 잘못되었습니다 (예상 2, 3)"라고 입력하여 3 차원 numpy 배열에 입력으로 함수를 제공하려고 할 때 오류가 발생합니다. 하지만 2 차원 배열을 제공하면 충돌이 발생합니다 (파이썬이 응답을 멈추는 경우, 이는 2 차원 배열에서 3 차원 행렬 연산을 수행하려고하기 때문에 발생한다고 생각합니다).

그런 다음 입력을 3 차원 배열로 typeset하려고 시도했지만 함수는 여전히 2 차원 배열을 기대합니다. 내 코드에 문제가있을 수 있다고 생각했지만, cython 변수 선언을 없애고 파이썬 파일로 실행하면 모든 것이 잘되었습니다. 여기

함수 선언이다 문제

def isfc(np.ndarray[double, ndim=3] multi_activations, int gaussian_variance): 
    #cython variable declaration 
    cdef int time_len, activations_len, subj_num, timepoint, subj 
    cdef np.ndarray[double, ndim=2] correlations_vector, normalized_activations, coefficients,normalized_sum_activations 
    cdef np.ndarray[double, ndim=3] c_activations, activations_sum, correlations_mean 
    cdef np.ndarray[double, ndim=4] correlations 
    cdef np.ndarray gaussian_array, coefficients_sum, coefficient, sigma_activations, sigma_activations_sum 

    #assign initial parameters 
    **subj_num, activations_len, time_len= multi_activations.shape[0],multi_activations.shape[1],multi_activations.shape[2]** 
    coefficients_sum = np.zeros(time_len) 
    correlations= np.zeros([subj_num, time_len,activations_len,activations_len]) 
    correlations_vector = np.zeros([time_len,(activations_len * (activations_len-1)/2)]) 
    coefficients = np.zeros([time_len, activations_len,time_len]) 
    gaussian_array = np.array([exp(-timepoint**2/2/gaussian_variance)/sqrt(2*pi*gaussian_variance) for timepoint in range(-time_len+1,time_len)]) 
    **c_activations = np.array(multi_activations)** 

입력이 multi_activations이며,이 3 차원 사이 썬 버퍼에 복사되기 전에 라인은 **로 표시에 만 사용된다.

나는이 함수에 multi_activations 입력으로 3 차원 배열을 전달할 때 오류가 함수 호출에 있도록 좁혔습니다. 함수 호출이 아니라 함수 내에서 오류가 발생합니다. 이는 단순히 입력 매개 변수에 대한 버퍼 크기 불일치 일뿐입니다. 어떤 도움이 크게

+1

이 코드의 스크린 샷을 사용하지 마십시오 얻을. 코드를 텍스트로 인라인으로 게시하십시오. –

+1

그 위에 오류가 발생한 줄을 * * 표시하십시오. 가장 유용한 것은 오류의 전체 추적입니다. 당신은 [ask]와 [mcve]를 만드는 방법으로부터 이익을 얻을 수 있습니다. –

+0

문제 코드를 추가하십시오. 콘솔 출력 및 코드 포맷에 대해서는 https://stackoverflow.com/help/how-to-answer – guenhter

답변

0

오류가 라인에 발생 주시면 감사하겠습니다 :

coefficients = np.zeros([time_len, activations_len,time_len]) 

내가 오른쪽 라인을 가리키는 유용한 오류 메시지가 표시됩니다. 그렇게하지 않으면 빌드 프로세스 중에 파일을 이동하거나 이름을 바꾸어 실행했을 때 .pyx 파일을 찾을 수 없게 될 가능성이 있습니다.

해결 방법은 coefficients의 유형을 3D 배열로 변경하거나 np.zeros과 함께 2D 배열을 만드는 것입니다. 그것을 2 차원 배열을 전달할 때


나는 당신의 사고를 재현 할 수 없습니다 - 난 그냥 ValueError: Buffer has wrong number of dimensions

+0

감사합니다! 이것은 효과가있다! 왜 줄 번호가 오류에 나타나지 않는지 모르겠다. 나는 내 pyx 파일을 옮겼다 고 생각하지 않는다. – PSA23