2016-01-22 5 views
0

Я хочу вытащить набор полей для объектов в наборе запросов Django и преобразовать их в матрицу с полями в качестве столбцов для некоторых вычислений. Я добрался до точки:Преобразование Django-запросов в матрицу numpy

qs = models.Devices.objects.all()

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

, который возвращает список словарей заказанного объекта.

Я хочу знать, есть ли способ преобразовать их в строки матрицы numpy, а также, если есть способ сохранить индекс, где эти значения хранятся в db?

Я хочу сделать некоторые вычисления (иногда разные в зависимости от типа параметра), а затем в конечном итоге использовать результирующие векторы, чтобы заполнить/перезаписать существующий столбец в db, чтобы упорядочение было одинаковым.

ответ

1

Вы можете

  1. Используйте метод values_list(), чтобы получить список списков. Включите в значения значения id.
  2. Использовать список по результатам запроса для удаления идентификаторов из params и сгенерировать список ids.
  3. Использовать params в качестве параметра для numpy.matrix().
  4. Выполнять операции над матрицей.
  5. Итерация над идентификаторами и сохранение значений из каждой строки матрицы в соответствующий объект.

    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() 
    
Смежные вопросы