Рассчитать точечный продукт между двумя массивами с помощью MongoDB Aggregate - PullRequest
0 голосов
/ 17 мая 2018

У меня есть документы в следующем формате:

{
  '_id': ObjectId('5a7884437443cfd470893efc'),
  'source': [1,2,3,3]
  'sink': [5,6,7,8]
}

Как вычислить точечное произведение между массивом источника и приемника (векторами), используя конвейер агрегации

1 Ответ

0 голосов
/ 17 мая 2018

Предполагая, что оба массива имеют одинаковую длину, которую вы можете использовать ниже агрегации:

db.collection.aggregate([
    {
        $project: {
            dotProduct: {
                $reduce: {
                    input: { $range: [ 0, { $size: "$source" }] },
                    initialValue: 0,
                    in: { $add: [ "$$value", { $multiply: [ { $arrayElemAt: [ "$source", "$$this" ] }, { $arrayElemAt: [ "$sink", "$$this" ] } ] } ] }
                }
            }
        }
    }    
])

$ range используется для генерации массива из 4 элементов, в данном случае (0,1,2,3) и тех,используются в качестве индексов для оператора $ arrayElemAt . $ redu * просто суммирует все продукты для определенных индексов, возвращая скалярное значение.В $reduce используются две специальные переменные: $$value представляет сумму, а $$this представляет индекс, сгенерированный $range

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...