这是一个非常不完整的答案,只有真正覆盖一对夫妇的它一小部分(如果我想的更多的东西,我会编辑):
升压doesn't look to implement operator[]
specifically for numpy arrays。这意味着operator[]
将来自基类object
类(即ndarray
继承),这将意味着调用将通过Python机制到达__getitem__
,因此索引将变慢(接近Python速度)。如果你想在速度做索引,你必须自己做指针运算:
// rough gist - untested:
// i,j,k are your indices
double* data = reinterpret_cast<double*>(array.get_data());
// in reality you'd check the dtype - the data may not be a double...
double data_element = array.strides(0)*i + array.strides(1)*j +array.strides(2)*k;
相比之下用Cython有内置的自动numpy的阵列的高效的索引。
用Cython是不一样的东西大std::vector
(虽然不是绝对可怕的 - 你可以它通常诱使做你想要什么)。一个明显的限制是所有的cdef
都必须在函数的开头,所以C++类在默认情况下在那里构造,然后在之后分配给/操作(这可能有点低效)。对于超出简单用途的任何事情,您不希望在Cython中操作C++类型(相反,最好使用C++编写代码,然后从Cython调用它)。
第二个限制是它与非类模板发生冲突。一个常见的例子是std::array
,它以模板编号。根据您计划的代码,这可能会也可能不是问题。
如果你想要更多的答案,然后不接受我的!当它显然只是部分答案时,接受它会说“这个问题已经解决了”。 – DavidW
考虑到问题的性质,我无法知道它是否是部分的。道歉,如果这是不好的礼仪。 – MaxB
这不是真正的礼节(你可以选择接受任何你喜欢的问题) - 我只是觉得你有最好的机会在没有被接受的答案的情况下得到更多的答案。 – DavidW