是否有理由认为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和python numpy中,默认值是2范数。我R
与此不一致似乎很奇怪。
我的直觉是默认选项的实现应该与最常用的规范相对应。
答案 0 :(得分:1)
如果R与LAPACK紧密相关,则原因很简单。 LAPACK是用Fortran编写的,它按列存储矩阵,而1-norm计算算法是面向列的,因此,在有选择的情况下,LAPACK倾向于使用1-norm而不是其他范式。
换句话说,要快速计算范数,R将此任务委托给LAPACK,LAAPACK中计算最快的范数是1-范数。
答案 1 :(得分:0)
我的理解是,在R help中,它明确引用了LAPACK库中的DLANGE,它不计算2范数。