如何序列化numpy数组?

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公开了有关此类功能的教程,那么不胜感激。

Ant*_*i A 5

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)