Cython:无法分配给2d向量

2024-04-28 23:29:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下资料:

# 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,
)

我该如何解决这个问题


Tags: fromimportfoodefsetuplanguagematrixint
1条回答
网友
1楼 · 发布于 2024-04-28 23:29:33

您应该使用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-没有元素),不幸的是,它没有由于超出范围的访问而崩溃

相关问题 更多 >