2017-05-19 1 views
2

似たような質問がありますが、いずれも私の問題に対処していないので、ここで新しいメッセージを投稿しています。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次元配列を渡すと、エラーが絞り込まれました。関数呼び出しではなく、関数内でエラーが発生します。これは単に、入力パラメータのバッファサイズの不一致です。 は、すべてのヘルプは大幅に

+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

関連する問題