用python重写这段代码cpdef squaredMahaDistance(cnp.ndarray[FLOAT64, ndim=2] X, cnp.ndarray[FLOAT64, ndim=2] loc_, cnp.ndarray[FLOAT64, ndim=3] scale_inv_cholesky_, cnp.ndarray[FLOAT64, ndim=2] sq_maha_dist): cdef int i, n_components, j, k, N, D i = 0 cdef cnp.ndarray[FLOAT64, ndim=2] temp_arr = np.empty((X.shape[1], X.shape[1])) cdef cnp.ndarray[FLOAT64, ndim=2] y = np.empty((X.shape[0], X.shape[1])) cdef cnp.ndarray[FLOAT64, ndim=2] dotProd = np.empty((X.shape[0], X.shape[1])) n_components = scale_inv_cholesky_.shape[2] N = X.shape[0] D = X.shape[1] for i in range(n_components): for j in range(N): for k in range(D): y[j,k] = X[j,k] - loc_[i,k] for j in range(D): for k in range(D): temp_arr[j,k] = scale_inv_cholesky_[j,k,i] fast_matmul(y, temp_arr, dotProd) for j in range(N): sq_maha_dist[j,i] = 0 for k in range(D): sq_maha_dist[j,i] += dotProd[j,k]**2
时间: 2023-03-13 22:40:53 浏览: 246
答案:下面是用Python重写的这段代码:for i in range(n_components):
for j in range(N):
for k in range(D):
y[j,k] = X[j,k] - loc_[i,k]
for j in range(D):
for k in range(D):
temp_arr[j,k] = scale_inv_cholesky_[j,k,i]
fast_matmul(y, temp_arr, dotProd)
for j in range(N):
sq_maha_dist[j,i] = 0
for k in range(D):
sq_maha_dist[j,i] = dotProd[j,k]**2
相关问题
cdef cpd.core.groupby.DataFrameGroupBy groups = self.processed_data.groupby(by='车牌号')这段代码在编译时报错:Cython.Compiler.Errors.CompileError: classify_data.pyx
因为在Cython中,只有cdef函数可以使用Cython的高级特性,而cdef变量则只能使用C语言的基础特性。因此,将DataFrameGroupBy对象声明为cdef变量是不合法的。
解决方法是将其声明为普通的Python变量,如下所示:
```python
groups = self.processed_data.groupby(by='车牌号')
```
如果需要在Cython中使用DataFrameGroupBy对象,则可以在函数参数中声明它们,例如:
```python
cpdef my_function(pandas.core.groupby.DataFrameGroupBy groups):
# function code
```
这样就可以在函数中使用DataFrameGroupBy对象了。
Traceback (most recent call last): File "D:\ycl\背景稀疏表示\稀疏表示非omp版本.py", line 148, in <module> residual = anomaly_detection(data, dictionary1.T) File "D:\ycl\背景稀疏表示\稀疏表示非omp版本.py", line 38, in anomaly_detection sparse_codes = sparse_representation(data, dictionary) File "D:\ycl\背景稀疏表示\稀疏表示非omp版本.py", line 33, in sparse_representation sparse_codes = sparse_encode(data, dictionary, max_iter=100) File "D:\PY3\lib\site-packages\sklearn\decomposition\_dict_learning.py", line 380, in sparse_encode positive=positive, File "D:\PY3\lib\site-packages\sklearn\decomposition\_dict_learning.py", line 155, in _sparse_encode lasso_lars.fit(dictionary.T, X.T, Xy=cov) File "D:\PY3\lib\site-packages\sklearn\linear_model\_least_angle.py", line 1138, in fit Xy=Xy, File "D:\PY3\lib\site-packages\sklearn\linear_model\_least_angle.py", line 1080, in _fit positive=self.positive, File "D:\PY3\lib\site-packages\sklearn\linear_model\_least_angle.py", line 187, in lars_path positive=positive, File "D:\PY3\lib\site-packages\sklearn\linear_model\_least_angle.py", line 786, in _lars_path_solver arrayfuncs.cholesky_delete(L[:n_active, :n_active], ii) File "sklearn\utils\arrayfuncs.pyx", line 50, in sklearn.utils.arrayfuncs.__pyx_fused_cpdef TypeError: No matching signature found Process finished with exit code 1
根据你提供的错误信息,看起来是在使用`sparse_encode`函数时出现了一个错误。错误信息中指示了一个`TypeError`,指出没有找到匹配的函数签名。
这个问题可能是由于传递给`sparse_encode`函数的参数不正确引起的。请确保传递给`sparse_encode`函数的`data`和`dictionary`参数具有正确的形状和类型。`data`应该是一个二维数组,其中每一行表示一个数据样本,而`dictionary`应该是一个二维数组,其中每一列表示一个字典元素。
此外,还要注意确保使用正确的版本的Scikit-learn库。如果你使用的是较旧的版本,可能会导致不兼容的问题。建议升级到最新版本的Scikit-learn库,以避免可能的错误。
如果问题仍然存在,请提供更多关于数据和代码的细节,以便更好地帮助你解决问题。
阅读全文