我想编写一个从磁盘上的CSV(带有x,y坐标)读取的API,并以JSON格式输出它们,以便由Web前端呈现。问题是有很多数据点(30k的顺序),所以从x和y的numpy数组进入JSON真的很慢。
这是我当前以JSON格式获取数据的函数。有什么方法可以加快速度吗?对于每个2d点来说,拥有如此大的数据结构似乎是多余的。
def to_json(xdata, ydata):
data = []
for x, y in zip(xdata, ydata):
data.append({"x": x, "y": y})
return data
答案 0 :(得分:1)
你可以使用列表理解,如:
def to_json(xdata, ydata):
return [{"x": x, "y": y} for x, y in zip(xdata, ydata)]
消除使用unnessacary变量,更清洁。
您还可以使用以下生成器:
def to_json(xdata, ydata):
return ({"x": x, "y": y} for x, y in zip(xdata, ydata))
他们创造超级快速并且在系统上很轻,几乎没有记忆。 这是最后一次,直到你做一些事情,比如把它转换成一个列表。
由于对象只是x-y坐标,因此我使用带有x-y元组的生成器对象 - 它们也可以更快地创建 - 如下所示:
def to_json(xdata, ydata):
return ((x,y) for x, y in zip(xdata, ydata))
编辑:你可以用列表[]
替换元组,它们是有效的JSON数组。
答案 1 :(得分:0)
你的方法似乎足够合理。以下是我可能会做出的一些改变。 itertools模块有许多方便的工具,可以让您的生活更轻松。我使用了izip,你可以在here
上阅读import json
from itertools import izip
def to_json(xdata, ydata):
data = []
for x, y in izip(xdata, ydata): # using izip is more memory efficient
data.append({"x": x, "y": y})
return json.dumps(data) # convert that list into json