Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Cython:无法分配给2d向量_Python_C++_Cython - Fatal编程技术网

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脚本(如果有帮助的话)。