方法需要类型为'double *'的参数吗?

时间:2019-05-02 20:43:41

标签: python python-3.x

我是python的新手,我正尝试使用python的epanet包装器编写一些代码,我认为这些包装器是SWIG包装的。我需要使用一种方法,如下所述。但是,我似乎无法获得该方法来接受第三个参数“ values:”的任何类型的值。我尝试尝试得到的任何错误:TypeError:方法“ ptrn_set”中的类型为“ double *”的参数3

如何在Python中将我的一个或多个值转换为“双*”?解决办法是什么?

感谢您的帮助...

    """
    ptrn_set(ph, index, values, len) -> int

    Parameters
    ----------
    ph: Handle
    index: int
    values: double *
    len: int

    """
    return _toolkit.ptrn_set(ph, index, values, len)

3 个答案:

答案 0 :(得分:0)

我在这里找到了: https://docs.python.org/2.4/lib/typesnumeric.html: 浮点数是使用C中的double实现的

您尝试过浮动吗?

答案 1 :(得分:0)

Python本身不支持类型double *的值。在C语言中,这是一个指向双精度浮点数的指针。在Python中,实际上每个名称都是一个指针,但是不能有一个(本地)值作为指​​针。

从上下文来看,看起来他们实际上想要一个双精度数组。他们确实应该将其写为double [],但是double *与之兼容。你可以尝试

values = [1.0, 2.0]
_toolkit.ptrn_set(ph, index, values, len(values))

这样做不是很Pythonic,但是如果可行,它就会奏效。如果那不起作用,请查看您的expanet python包装器是否提供了一种构造此类值的方法。

如果您的expanet Python包装器没有提供构造此类值的方法,则可以尝试cffi库,但这非常棘手。我认为x = ffi.new("double[10]")将为您提供10个双打的数组。

答案 2 :(得分:0)

我知道一段时间过去了,您可能已经解决了它,但它可能对其他人有用。

您可以使用以下函数创建一个将被 epanet 接受的数组:

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

输入是一个浮点数组,如 [1.2 , 0.8]。 这假设您将 epanet python 库导入为 from epanet import toolkit as en, 来源:https://github.com/OpenWaterAnalytics/epanet-python/issues/57