【问题标题】:Cython cannot convert python object to const float *Cython 无法将 python 对象转换为 const float *
【发布时间】:2020-04-19 11:46:24
【问题描述】:

我正在包装一个用 C++ 编写的绘图库,目前正在研究最终的绘图功能。我正在使用imgui-plot,所以要感谢 soulthreads 的写作。话虽如此,我已经通过将头文件中的所有结构移动到父级然后将它们分配给 plotconfig 结构来稍微修改了代码。

以下是为便于阅读而编辑的相关代码的 sn-ps:

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

core.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 的数组对象抽象有关。

不管怎样,我真的很感激这方面的一些建议。

【问题讨论】:

  • 它是否适用于const double*
  • 我没试过,但我想如果你用vector[double]代替的话。

标签: python c++ arrays cython


【解决方案1】:

对于那些想知道的人,这些似乎对我有用。我创建了一个向量,将值推送到它上面,并将指针分配给第一个值。

core.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)

【讨论】:

    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多