为什么 R 范数函数中的默认范数是 1-范数?
Why is the default norm in R norm function the 1-norm?
R 中用于 norm
函数的默认范数是 1 范数是否有原因?
我正在 运行 列出一些代码从 matlab
到 R
并且我 运行 加入其中,因为默认情况下是 2-范数。
对我来说,默认值应该是 2 范数,t运行slates 到欧几里得距离。
我希望有人能澄清这一点,或者给出这个选择的任何历史原因。我问这个问题的原因是为了了解 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-范数。 R
与此不一致对我来说似乎很奇怪。
我的直觉是默认选项的实现应该符合最常用的规范。
我的理解是,在 R help 中,它明确引用了 LAPACK 库中的 DLANGE,该库不计算 2-范数。
如果R和LAPACK紧密相关,那么原因很简单。 LAPACK是用Fortran写的,按列存储矩阵,1-范数计算算法是面向列的,所以LAPACK在有选择的时候更倾向于1-范数而不是其他范数
换句话说,为了快速计算范数,R 将此任务委托给 LAPACK,其中计算最快的范数是 1-范数。
R 中用于 norm
函数的默认范数是 1 范数是否有原因?
我正在 运行 列出一些代码从 matlab
到 R
并且我 运行 加入其中,因为默认情况下是 2-范数。
对我来说,默认值应该是 2 范数,t运行slates 到欧几里得距离。
我希望有人能澄清这一点,或者给出这个选择的任何历史原因。我问这个问题的原因是为了了解 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 和 python numpy 中,默认值为 2-范数。 R
与此不一致对我来说似乎很奇怪。
我的直觉是默认选项的实现应该符合最常用的规范。
我的理解是,在 R help 中,它明确引用了 LAPACK 库中的 DLANGE,该库不计算 2-范数。
如果R和LAPACK紧密相关,那么原因很简单。 LAPACK是用Fortran写的,按列存储矩阵,1-范数计算算法是面向列的,所以LAPACK在有选择的时候更倾向于1-范数而不是其他范数
换句话说,为了快速计算范数,R 将此任务委托给 LAPACK,其中计算最快的范数是 1-范数。