mat*_*ath 5 python numpy django-rest-framework
我是django-rest-framework的新手,所以对不起,如果我的问题太简单或没有太大意义,我感到抱歉。
我已经编写了一个科学的python程序包,并希望通过API使其可用。为此,我正在使用django rest框架。
从高级的角度来看,要使包中的一个特定功能可用,我必须调整两个文件。在序列化器文件中,我定义了某些验证,该验证将传入的请求转换为python本机类型,并定义了输入参数的验证。在视图文件中,我将调用验证并在调用包内部函数之前进行一些转换。
假设我要通过API公开的函数如下所示:
In [6]: def f(a):
...: return np.mean(a)
...:
Run Code Online (Sandbox Code Playgroud)
现在,API将通过json文件接收输入。我的第一个问题是如何为以上功能定义串行器?ListField是正确的选择吗?
class fSerializer(serializers.Serializer):
nparray = serializers.ListField(
source="a",
child=serializers.DecimalField(max_digits=12, decimal_places=2)
)
Run Code Online (Sandbox Code Playgroud)
还是还有其他更适合的领域?
视图文件将如下所示:
class fViewSet(viewsets.ViewSet):
def create(self, request):
serializer = fSerializer(data=request.data)
if serializer.is_valid():
try:
a = np.asarray(serializer.validated_data.get("a"))
json_return = json.dumps(f(a))
return HttpResponse(json_return,
content_type='application/json')
Run Code Online (Sandbox Code Playgroud)
如您所见,我首先将经过验证的数据转换为numpy arary。但这是正确的(pythonic)方法吗?应该在串行器中完成吗?
如果有人通过API公开了有关此类功能的教程,那么不胜感激。
Numpy数组和Python列表之间的转换相当快,因此我们只是在发送数据之前将数组转换为列表,并在需要进行一些Numpy计算时将其转换为数组。
data = [[1,2], [3,1]]
data_np = np.array(data)
data_list = data_np.tolist()
data == data_list
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1416 次 |
| 最近记录: |