我是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)
答案 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