Cython:无法分配给二维向量
Posted
技术标签:
【中文标题】Cython:无法分配给二维向量【英文标题】:Cython: unable to assign to 2d vector 【发布时间】:2020-06-19 18:47:37 【问题描述】:我有以下几点:
# distutils: language = c++
from libcpp.vector cimport vector
def foo():
cdef vector[vector[int]] matrix
matrix.reserve(100);
matrix[0] = [1,2,3]
print(matrix)
foo()
它打印出一个空列表;我希望它打印出第一个元素为[1,2,3]
的向量。
Setup.py 脚本:
from setuptools import setup
from Cython.Build import cythonize
setup(
name='myfile',
ext_modules=cythonize("my_file.pyx"),
zip_safe=False,
)
我该如何解决这个问题?
【问题讨论】:
@bhristov 您具体要求什么?这在我的机器上编译并运行良好。如果有帮助,我已经编辑并添加了 setup.py 脚本。 【参考方案1】:您应该使用matrix.resize(100)
而不是matrix.reserve(100)
。 std::vector<>::reserve
不会改变向量的大小 - 它只保留内存,因此不需要发生进一步(多次)重新分配:
%%cython
...
matrix.reserve(100)
print(matrix.size()) # prints 0
matrix.resize(100)
print(matrix.size()) # prints 100
...
现在matrix[0] = [1,2,3]
是未定义的行为(大小为0
- 没有元素),你很不幸它不会因为超出范围的访问而崩溃。
【讨论】:
以上是关于Cython:无法分配给二维向量的主要内容,如果未能解决你的问题,请参考以下文章
如何将numpy.ndarray分配给cython中nogil循环下的临时变量?