gpt4 book ai didi

python - 索引的 Cython 内存 View 应该是 Py_ssize_t 类型还是 int 类型?

转载 作者:太空宇宙 更新时间:2023-11-04 00:29:56 24 4
gpt4 key购买 nike

我有一个 cython 代码,它采用 2d numpy.ndarray 数据 (M) 和一个 numpy.ndarray 索引 (Ixs).它遍历 Ixs 的条目并使用 Ixs 的值 ix 来索引 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 作为索引类型(我读过它是为了适应 64 位架构)但现在我正在使用 类型的内存 View >int... 在这种情况下,我看不到创建 Py_ssize_tnumpy.ndarray 的方法,因此 ixPy_ssize_t

编写此 cython 代码的正确方法是什么?使用int有什么问题吗?

最佳答案

有一点需要注意,您需要输入 ix

您编写的代码可以正常工作,M[c, ix] 会将 ix 从 int 转换为 Py_ssize_t,这应该始终是一个安全的转换。

也就是说,您可以并且可能应该让您的索引器数组为 Py_ssize_t。对应的numpy类型为np.intp

https://docs.scipy.org/doc/numpy-1.13.0/user/basics.types.html

关于python - 索引的 Cython 内存 View 应该是 Py_ssize_t 类型还是 int 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46236913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com