我知道在 SQL 中计算稀疏点积很容易,但是求和(对于非常长的向量)的最佳方法是什么?
一个连接是不够的,因为如果一个坐标填充在一个向量中但没有填充在另一个向量中,它将被忽略。
因此,我用 PHP 循环计算总和...这是一个非常愚蠢的想法。
我目前正在考虑填充缺失的 0 以准备内部联接,但是否有捷径(如将 NULL 转换为 0 的外部联接)?
编辑。这是我的向量表的结构:
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
列很笨拙。有什么想法吗?
最佳答案
coalesce(Field,OtherField, AnotherField,0)
coalesce 基本上是一个 if then forever... 它从您的变量列表中选择第一个非空值
isNull 做同样的事情,但只针对 2 个值
isNull(Field,0)
关于mysql - SQL中长向量的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151986/