Я знаю, что в SQL легко вычислить произведение разреженных точек, но как лучше всего сложить сумму (для очень длинных векторов)?
Объединения недостаточно, потому что если координатазаполненный одним вектором, но не другим, он будет игнорироваться.
Таким образом, я вычислил сумму с помощью цикла PHP ... и это была довольно глупая идея.
I 'В настоящее время я думаю о заполнении недостающих 0, чтобы подготовить внутреннее соединение, но есть ли ярлык (например, внешнее соединение, преобразующее NULL в 0)?
Edit. Вот структурамоей таблицы векторов:
CREATE TABLE `eigaki_vectors` (
`name` varchar(2) COLLATE utf8_unicode_ci NOT NULL,
`i1` int(10) NOT NULL,
`i2` int(10) NOT NULL,
`value` double NOT NULL,
UNIQUE KEY `key` (`name`,`i1`,`i2`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
В данном конкретном случае вектор состоит из индексов: v_{i_1, i_2}
, но это не имеет ничего общего с проблемой.
Я ожидал сделатьчто-то вроде (спасибо xQbert):
SELECT v1.i1, v1.i2, isNull(v1.value, 0) + isNull(v2.value, 0)
FROM eigaki_vectors v1 FULL OUTER JOIN eigaki_vectors v2
ON v1.i1 = v2.i1 AND v1.i2 = v2.i2
AND v1.name = 'a' AND v2.name = 'b'
для добавления векторов a
и b
.Но FULL OUTER JOIN
не существует на MySQL, и я думаю, что я неуклюж с колонкой name
.Есть идеи?