gpt4 book ai didi

python - 将带有字符串的结构化 numpy 数组传递给 cython 函数

转载 作者:IT老高 更新时间:2023-10-28 22:09:39 26 4
gpt4 key购买 nike

我正在尝试通过定义 cython 结构类型在 cython 中创建一个接受 numpy 结构化数组或记录数组的函数。假设我有数据:

a = np.recarray(3, dtype=[('a', np.float32),  ('b', np.int32), ('c', '|S5'), ('d', '|S3')])
a[0] = (1.1, 1, 'this\0', 'to\0')
a[1] = (2.1, 2, 'that\0', 'ta\0')
a[2] = (3.1, 3, 'dogs\0', 'ot\0')

(注意:下面描述的问题在有或没有空终止符的情况下都会发生)

然后我有 cython 代码:

import numpy as np
cimport numpy as np

cdef packed struct tstruct:
np.float32_t a
np.int32_t b
char[5] c
char[3] d

def test_struct(tstruct[:] x):
cdef:
int k
tstruct y

for k in xrange(3):
y = x[k]
print y.a, y.b, y.c, y.d

当我尝试运行 test_struct(a) 时,出现错误:

ValueError: Expected a dimension of size 5, got 8

如果在数组和相应的结构中重新排序,使得包含字符串的字段彼此不相邻,则该函数按预期工作。似乎 Cython 函数没有正确检测 cd 字段之间的边界,并且认为您正在传递长度总和的 char 数组.

没有重新洗牌数据(这是可能的,但并不理想),是否有另一种方法可以将具有固定长度字符串数据的recarray 传递给 Cython?

更新:这似乎是一个潜在的 Cython 错误。请参阅有关 Cython google 组的以下讨论,该讨论暗示了问题出现的位置:

https://groups.google.com/forum/#!topic/cython-users/TbLbXdi0_h4

更新 2: 自 2014 年 2 月 23 日起,此错误已在 Github 上的 cython 主分支中修复,该补丁计划包含在 v0.20.2 中:https://github.com/cython/cython/commit/58d9361e0a6d4cb3d4e87775f78e0550c2fea836

最佳答案

这是一个错误,已于 2014 年 2 月 22 日在 Github 上的主 cython 分支中修复,该补丁计划包含在 v0.20.2 中:https://github.com/cython/cython/commit/58d9361e0a6d4cb3d4e87775f78e0550c2fea836

关于python - 将带有字符串的结构化 numpy 数组传递给 cython 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21435378/

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