我想为Django查询集中的对象提取一组字段,并将它们转换为矩阵,其中字段为列,用于某些计算。我已经达到了目的:
qs = models.Devices.objects.all()
params = qs.values('b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8')
返回按对象排序的字典列表。
我想知道是否有一种很好的方法可以将这些转换为numpy矩阵的行,并且还有一种方法可以保留这些值在db中的保存位置的索引?
我想做一些计算(有时根据参数类型不同),然后最终使用结果向量填充/覆盖db中的现有列,使得排序相同。
答案 0 :(得分:1)
你可以
values_list()
方法获取列表列表。在值中包含id
。params
中删除ID并生成ids
列表。params
作为numpy.matrix()
。迭代id并将矩阵每行的值保存到相应的对象。
import numpy as np
qs = models.Devices.objects.all()
params = qs.values_list('id', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8')
ids = [arr.pop(0) for arr in params]
matrix = np.matrix(params)
# perform operations here
for index, id in enumerate(ids):
row = matrix[index].flat
obj = qs.get(id=id)
obj.b1 = row.next()
obj.b2 = row.next()
obj.b3 = row.next()
obj.b4 = row.next()
obj.b5 = row.next()
obj.b6 = row.next()
obj.b7 = row.next()
obj.save()