python - Cython 无法将 python 对象转换为 const float *
问题描述
我正在包装一个用 C++ 编写的绘图库,目前正在研究最终的绘图功能。我正在使用imgui-plot,因此要感谢 soulthreads 的写作。话虽如此,我已经通过将头文件中的所有结构移动到父级然后将它们分配给 plotconfig 结构来稍微修改了代码。
以下是为便于阅读而编辑的相关代码片段:
imgui-plot.h
struct Values{
const float xs* = nullptr
const float ys* = nullptr
};
struct PlotConfig{
Values values
};
cimgui.pxd
cdef extern from 'imgui-plot.h' namespace 'ImGui':
cdef struct Values:
const float xs*
const float ys*
cdef struct PlotConfig:
Values values
核心.pyx
import cimgui
def plot(x_data, y_data):
cdef cimgui.PlotConfig conf
conf.values.xs = x_data
conf.values.ys = y_data
cimgui.Plot(conf)
我得到的错误
> conf.values.xs = x_data
Cannot convert python object to 'const float *'
我尝试将 x_data 放入向量中并使其变为非常数。我现在意识到该错误可能与作为常量指针或对内存位置的引用的变量以及 python 的数组对象抽象有关。
无论如何,我真的很感激这方面的一些提示。
解决方案
对于那些想知道的人,这些似乎对我有用。我创建了一个向量,将值推到它上面,并将指针分配给第一个值。
核心.pyx
from libcpp.vector cimport vector
import cimgui
def plot(x_data, y_data):
cdef cimgui.PlotConfig conf
cdef vector[float] x_s
cdef vector[float] y_s
for x in x_data:
x_s.push_back(x)
for y in y_data:
y_s.push_back(y)
conf.values.xs = &x_s[0]
conf.values.ys = &y_s[0]
cimgui.Plot(conf)
推荐阅读
- javascript - 无法将商店从 .ts 文件导入 .js 文件
- compiler-errors - 为什么将其标记为编译器错误,它看起来正确
- android - 将图像从 sd 卡放到 android 中的 imageview
- symfony - Api 平台自定义 swagger/openapi 上下文主体
- c# - 如何验证与外部提供商 (Google) 的 HttpClient 连接
- google-chrome - 如果在浏览器上禁用 JS,对自定义 chrome 插件有什么影响?
- r - 自动检查 R 包是否存在恶意或可疑内容?
- mysql - mysql - 如果null显示0,如何按列选择行计数组
- asp.net-core - 让我们使用 ASP.Net Core 和 Azure 应用服务进行加密
- html - 如何使用图像底部带有 figcaption 的内联块来订购我的图标