问题
I found the following lines in the scikit-learn package:
if is_sparse:
problem = csr_set_problem(
(<np.ndarray[np.float64_t, ndim=1, mode='c']>X.data).data,
(<np.ndarray[np.int32_t, ndim=1, mode='c']>X.indices).shape,
(<np.ndarray[np.int32_t, ndim=1, mode='c']>X.indices).data,
(<np.ndarray[np.int32_t, ndim=1, mode='c']>X.indptr).shape,
(<np.ndarray[np.int32_t, ndim=1, mode='c']>X.indptr).data,
Y.data, (<np.int32_t>X.shape[1]), bias,
sample_weight.data)
else:
...
All my searches for "angle brackets in Python" give answers about documentation or decorator syntax, which I am pretty sure this is neither because it looks like actual logic.
What do the angle brackets in the above Python code do and where can I learn more about them?
回答1:
That is Cython's syntax for type casting/coercion. It is not plain Python. Notice the file extension is .pyx
You can learn more about them in the documentation for Cython.
Here's an example taken from the doc page:
cdef char *p, float *q
p = <char*>q
Using Cython is not uncommon with projects like scikit-learn
, where one gains significant optimisations by mixing readable Python with blazing-speed C.
回答2:
Take a look at Cython documentation, about types.
Additionally you could note that the file extension is .pyx
and on the top of the file there are cimport
statements.
来源:https://stackoverflow.com/questions/43118694/what-is-the-meaning-of-angle-brackets-in-python