2016-01-22 102 views
0

我想爲Django查詢集中的對象提取一組字段,並將它們轉換爲矩陣,並將字段用作某些計算的列。我已經得到了點:將Django模型查詢集轉換爲numpy矩陣

qs = models.Devices.objects.all()

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

它返回對象下令詞典列表。

我想知道是否有一種很好的方法將它們轉換爲numpy矩陣的行,並且還有一種方法可以保持這些值在db中的位置的索引?

我想做一些計算(有時根據參數類型不同而定),然後最終使用合成向量來填充/覆蓋分貝中的現有列,使得排序相同。

回答

1

你可以

  1. 使用values_list()方法來獲取列表的列表。在值中包含id
  2. 使用查詢結果的列表理解從params中刪除ID並生成ids的列表。
  3. 使用params作爲numpy.matrix()的參數。
  4. 在矩陣上執行操作。
  5. 迭代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()