繁体   English   中英

Cython ValueError:缓冲区的维数错误(预期2,得3)

[英]Cython ValueError: Buffer has wrong number of dimensions (expected 2, got 3)

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

当我尝试给函数提供一个三维numpy数组作为输入时,Cython给了我一个错误,告诉我:“ValueError:Buffer有错误的维数(预期2,得到3)”。 但是当我给它一个二维数组时,它会崩溃(python停止响应,我认为这是因为我试图在二维数组上执行三维矩阵运算)。

然后,我尝试将输入排版为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数组。


传递2D数组时无法重现崩溃 - 我只得到一个ValueError: Buffer has wrong number of dimensions

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM