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

为什么R范数函数中的默认范数是1范数?,r,matlab,norm,R,Matlab,Norm,R中norm函数使用的默认范数是1-范数,这有什么原因吗 我把一些代码从matlab翻译成R,我遇到了这个问题,因为默认的是2-范数 在我看来,默认值应该是2-范数,也就是欧几里得距离 我希望有人能澄清这一点,或者给出这一选择的历史原因。我问这个问题的原因是为了理解matlab和R中范数函数的实现选择。下面是R中规范的一个实现 function (x, type = c("O", "I", "F", "M", "2")) { if (identical("2", type)) {

R中
norm
函数使用的默认范数是1-范数,这有什么原因吗

我把一些代码从
matlab
翻译成
R
,我遇到了这个问题,因为默认的是2-范数

在我看来,默认值应该是2-范数,也就是欧几里得距离

我希望有人能澄清这一点,或者给出这一选择的历史原因。我问这个问题的原因是为了理解
matlab
R
中范数函数的实现选择。下面是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中,默认值为2-范数。我觉得很奇怪,
R
与此不一致


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

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

如果R与LAPACK紧密相关,那么原因很简单。LAPACK是用Fortran编写的,它按列存储矩阵,1-范数计算算法是面向列的,因此当有选择时,LAPACK倾向于选择1-范数而不是其他范数


换句话说,为了快速计算范数,R将此任务委托给LAPACK,其中最快的范数类型是1-范数。

当使用您不熟悉的函数时,您应该始终查阅文档,有时即使您认为知道该函数。我知道@Roland,这就是我所做的。我只是好奇为什么选择在R中实现norm函数。因为它可能类似于1,2和inf?@percusse可能是这样,但背后可能有其他原因。如果您可以访问LAPACK用户指南,您可以查看LAPACK默认值。这是正确的,我已经检查了dlange的实现。但这是R中的一个选择,即默认使用的规范是什么。