【发布时间】:2026-01-23 11:25:02
【问题描述】:
有一个 C++ 函数可以返回一个浮点向量。如何在不复制的情况下将此向量转换为 NumPy 数组?现在我正在这样做:
cdef np.ndarray arr = np.ascontiguousarray(cpp_vector, dtype=np.float)
return arr
但这在大型向量上工作得非常慢(假设发生复制)。
【问题讨论】:
-
问题是,你能确保 cpp_vector 的存活时间足够长吗?否则你会在 numpy-array 中得到悬空指针。
-
请注意,C++ 标准不保证使用 IEEE 754 格式,即使大多数(所有?)编译器都是这种情况。这里不应该是个问题吗?
-
获得缓冲区接口后,您可以使用docs.scipy.org/doc/numpy-1.17.0/reference/generated/… 获得一个 numpy 数组而无需复制。如果缓冲区接口太多,您可以从第一个链接稍微更改 memory-nanny-approach 以使用 std::vector。顺便说一句,使用 std::move (C++11) 或 std::swap (也是 C++98),您可以更改 std::vector 中数据的所有权。
标签: python c++ cython numpy-ndarray