Python Cython:无法分配给2d向量
我有以下资料:Python Cython:无法分配给2d向量,python,c++,cython,Python,C++,Cython,我有以下资料: # 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 setu
# 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,
)
如何修复此问题?您应该使用
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
-没有元素),您很不幸,它没有因为超出访问范围而崩溃。您应该使用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
-没有元素),您很不幸,它没有由于超出范围的访问而崩溃。@bhristov您具体要求什么?这在我的机器上编译并运行良好。我已经编辑并添加了setup.py脚本(如果有帮助)。@bhristov您具体要求什么?这在我的机器上编译并运行良好。我已经编辑并添加了setup.py脚本(如果有帮助的话)。