-2

normR中函数使用的默认范数是1范数有什么原因吗?

我正在将一些代码从matlabto翻译R,我遇到了这个问题,因为默认情况下是 2-norm。

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

我希望有人能澄清这一点,或者给出这个选择的任何历史原因。我问这个问题的原因是要了解 和 中规范函数的实现matlab选择R。以下是 R 中 norm 的实现

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-norm。对我来说这似乎很奇怪,这R与此不一致。

我的直觉是默认选项的实现应该符合最常用的规范。

4

2 回答 2

1

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

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

于 2020-05-27T12:15:26.760 回答
0

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

于 2016-01-14T12:35:28.123 回答