gpt4 book ai didi

python - Cython ValueError : Buffer has wrong number of dimensions (expected 2, 得到 3)

转载 作者:行者123 更新时间:2023-11-28 18:22:27 31 4
gpt4 key购买 nike

有一些类似的问题,但没有一个解决我的问题,所以我在这里发布一个新问题。

当我尝试为函数提供一个 3 维 numpy 数组作为输入时,Cython 给我一个错误,告诉我:“ValueError:缓冲区的维数错误(预期为 2,得到 3)”。但是当我给它一个二维数组时,它崩溃了(python 停止响应,我认为这是因为我试图在一个二维数组上执行 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 缓冲区之前用在标有 ** 的行上。

我已将错误缩小到函数调用处,特别是当我将 3 维数组作为 multi_activations 输入传递给此函数时。我在函数调用时出错,而不是在函数内。这只是输入参数的缓冲区大小不匹配。任何帮助将不胜感激

最佳答案

错误发生在线路上:

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

我收到指向正确行的有用错误消息。如果不这样做,则可能是您在构建过程中移动或重命名了文件,因此在运行时找不到 .pyx 文件。

解决方案是将 coefficients 的类型更改为 3D 数组,或者使用 np.zeros 创建 2D 数组。


当传递一个二维数组时我无法重现你的崩溃 - 我只是得到一个ValueError: Buffer has wrong number of dimensions

关于python - Cython ValueError : Buffer has wrong number of dimensions (expected 2, 得到 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44061277/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com