为什么R范数中的默认范数是1范数?

时间:2016-01-14 12:10:19

标签: r matlab norm

是否有理由认为R中norm函数的默认范数是1范数?

我正在将一些代码从matlab翻译为R,我遇到了这个问题,因为默认情况下有2个标准。

对我来说,这似乎很直观,默认值应该是2范数,转换为欧几里德距离。

我希望有人可以澄清这一点,或者给出任何历史原因。

编辑:我不明白为什么会被投票。我之所以要问这个问题是为了理解matlabR中规范函数的实现选择。以下是R

中的规范的实现
function (x, type = c("O", "I", "F", "M", "2")) 
{
    if (identical("2", type)) {
        svd(x, nu = 0L, nv = 0L)$d[1L]
    }
    else .Internal(La_dlange(x, type))
}

默认选项为"O"。在matlab和python numpy中,默认值是2范数。我R与此不一致似乎很奇怪。

我的直觉是默认选项的实现应该与最常用的规范相对应。

2 个答案:

答案 0 :(得分:1)

如果R与LAPACK紧密相关,则原因很简单。 LAPACK是用Fortran编写的,它按列存储矩阵,而1-norm计算算法是面向列的,因此,在有选择的情况下,LAPACK倾向于使用1-norm而不是其他范式。

换句话说,要快速计算范数,R将此任务委托给LAPACK,LAAPACK中计算最快的范数是1-范数。

答案 1 :(得分:0)

我的理解是,在R help中,它明确引用了LAPACK库中的DLANGE,它不计算2范数。