비슷한 질문이 있지만 문제가 해결되지 않은 항목이 있으므로 여기에 새 질문을 게시하고 있습니다.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 차원 배열을 전달할 때 오류가 함수 호출에 있도록 좁혔습니다. 함수 호출이 아니라 함수 내에서 오류가 발생합니다. 이는 단순히 입력 매개 변수에 대한 버퍼 크기 불일치 일뿐입니다. 어떤 도움이 크게
이 코드의 스크린 샷을 사용하지 마십시오 얻을. 코드를 텍스트로 인라인으로 게시하십시오. –
그 위에 오류가 발생한 줄을 * * 표시하십시오. 가장 유용한 것은 오류의 전체 추적입니다. 당신은 [ask]와 [mcve]를 만드는 방법으로부터 이익을 얻을 수 있습니다. –
문제 코드를 추가하십시오. 콘솔 출력 및 코드 포맷에 대해서는 https://stackoverflow.com/help/how-to-answer – guenhter