索引的Cython内存视图是否应为Py_ssize_t或int类型?

时间:2017-09-15 10:01:09

标签: python arrays numpy cython cpython

我的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_tint

编写此cython代码的正确方法是什么?使用{{1}}时是否有任何问题?

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