首页 文章

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

提问于
浏览
0

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

qs = models.Devices.objects.all()

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

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

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

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

1 回答

  • 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()
    

相关问题