我的cython代码需要2d M
个数据(numpy.ndarray
)和Ixs
个索引(Ixs
)。它循环遍历ix
的条目,并使用Ixs
的值M
来索引def foo(double[:, ::1] M, int[:, ::1] Ixs):
cdef int rows = M.shape[0]
cdef int cols = M.shape[1]
cdef Py_ssize_t c, r
for c in range(rows):
for r in range(cols):
ix = Ixs[c, r]
dosomething(M[c, ix])
的列。请参阅以下代码:
Py_ssize_t
我知道我应该使用int
作为索引的类型(我已经读过它是为了适应64位架构)但是现在我正在使用numpy.ndarray
类型的内存视图...在这种情况下,我看不到创建Py_ssize_t
ix
的方法,以便Py_ssize_t
为int
。
编写此cython代码的正确方法是什么?使用{{1}}时是否有任何问题?
答案 0 :(得分:3)
有一点需要注意,您需要输入if ((nil != _mPictureInPictureController) {
isPiPActive = _mPictureInPictureController.isPictureInPictureActive;
}
_mPictureInPictureController = [[AVPictureInPictureController alloc] initWithPlayerLayer:aNewPlayerLayer];
if (isPiPActive) {
NSLog(@"PIP Active by previous layer");
[_mPictureInPictureController startPictureInPicture];
}
您编写的代码可以正常运行,ix
会将ix从M[c, ix]
转换为int
,这应始终是安全转换。
那就是说,你可以并且可能应该让你的索引器数组为Py_ssize_t
。相应的numpy类型为Py_ssize_t
https://docs.scipy.org/doc/numpy-1.13.0/user/basics.types.html