2017-02-15 20 views
2

Я хочу сделать на месте добавление векторов в cython, поэтому я использую scipy.linalg.cython_blas.daxpy.Каков правильный способ вызова scipy.linalg.cython_blas.daxpy?

Мой синтаксис:

daxpy(&n_samples, &tmp, &Q[0, ii], &inc, &G[0], &inc) 

Но в scikit-learn code, я прочитал

axpy(n_samples, -w[ii], &X_data[ii * n_samples], 1, R_data, 1) 

где axpy была определена как daxpy ранее.

Является ли & обязательным для первых двух переменных (int и double соответственно)? Почему нет & для двух первых аргументов в коде sklearn?

ответ

3

Я думаю, что это просто разница между BLAS и CBLAS.

BLAS (который использует scipy.linalg для вас) использует интерфейс FORTRAN, поэтому аргументы most (/ all?) (Включая простые, такие как целые) передаются указателями.

Scikit-learn looks to use CBLAS, а не обертки scipy.linalg. CBLAS, как представляется, определяет интерфейс, более естественный для C (простые аргументы, переданные по значению).


Таким образом, если вы используете обрывки Cython для скупых, вы должны делать это правильно.