似たような質問がありますが、いずれも私の問題に対処していないので、ここで新しいメッセージを投稿しています。Cython ValueError:バッファの次元数が間違っています(予想2、獲得3)
「ValueError:バッファの次元数が間違っています(2つは3つあります)」という入力として3次元のnumpy配列を入力するとエラーが発生します。しかし、私は2次元の配列を与えるとき、それはクラッシュする(Pythonは、私は2次元配列上で3次元の行列演算を実行しようとしているため、これは考えている応答を停止します)。
次に、入力を3次元配列としてタイプセットしようとしましたが、関数はまだ2次元配列を期待しています。私は自分のコードに何か問題があるかもしれないと思ったが、cython変数の宣言を取り除いてpythonファイルとして実行したところ、すべてうまくいきました。
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次元cythonバッファにコピーされる前に、それが唯一の**でマークされたラインで使われています:ここで
は、関数の宣言です。
私は関数呼び出し時にエラーを絞り込みました。特に、この関数にmulti_activations入力として3次元配列を渡すと、エラーが絞り込まれました。関数呼び出しではなく、関数内でエラーが発生します。これは単に、入力パラメータのバッファサイズの不一致です。 は、すべてのヘルプは大幅に
はあなたのコードのスクリーンショットを使用しないでください得ます。コードをインラインでテキストとして投稿します。 –
さらに、エラーが発生した行を*表示*してください。最も有用なのは、エラーの完全なトレースバックです。あなたは[ask]と[mcve]を作る方法から恩恵を受けるかもしれません。 –
問題のあるコードを追加してください。コンソールの出力とコードのフォーマットについては、https://stackoverflow.com/help/how-to-answer – guenhter