如何序列化 numpy 数组?

2023-12-23

我是 django-rest-framework 的新手,所以如果我的问题太简单或没有多大意义,我很抱歉。

我已经编写了一个科学的 python 包,并希望通过 API 提供它。为此,我使用 django Rest 框架。

从高层次的角度来看,为了使我的包中的一个特定功能可用,我必须调整两个文件。在序列化程序文件中,我定义了某些验证,将传入请求转换为 python 本机类型并定义输入参数的验证。在视图文件中,我调用验证并在调用包内部函数之前进行一些转换。

假设我想通过 API 公开的函数如下所示:

In [6]: def f(a):
   ...:    return np.mean(a)
   ...: 

现在 API 将通过 json 文件接收输入。我的第一个问题是如何为上述函数定义序列化器? ListField 是正确的选择吗?

class fSerializer(serializers.Serializer):
    nparray = serializers.ListField(
        source="a",
        child=serializers.DecimalField(max_digits=12, decimal_places=2)
    )

或者还有其他更适合的领域吗?

视图文件将如下所示:

 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')

正如您所看到的,我首先将经过验证的数据转换为 numpy 数组。但这是正确的(Pythonic)方法吗?应该在序列化器中完成吗?

如果有人有关于通过 API 公开此类函数的教程,我会非常乐意阅读。


Numpy 数组和 Python 列表之间的转换相当快,因此我们只需在发送数据之前将数组转换为列表,并在需要进行 Numpy 计算时将其转换为数组。

data = [[1,2], [3,1]]
data_np = np.array(data)
data_list = data_np.tolist()
data == data_list
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何序列化 numpy 数组? 的相关文章