将Django模型的查询集转换为numpy矩阵

时间:2016-01-22 00:59:30

标签: python django numpy pandas

我想为Django查询集中的对象提取一组字段,并将它们转换为矩阵,其中字段为列,用于某些计算。我已经达到了目的:

qs = models.Devices.objects.all()

params = qs.values('b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8')

返回按对象排序的字典列表。

我想知道是否有一种很好的方法可以将这些转换为numpy矩阵的行,并且还有一种方法可以保留这些值在db中的保存位置的索引?

我想做一些计算(有时根据参数类型不同),然后最终使用结果向量填充/覆盖db中的现有列,使得排序相同。

1 个答案:

答案 0 :(得分:1)

你可以

  1. 使用values_list()方法获取列表列表。在值中包含id
  2. 对查询结果使用列表理解,从params中删除ID并生成ids列表。
  3. 使用params作为numpy.matrix()
  4. 的参数
  5. 对矩阵执行操作。
  6. 迭代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()