如何计算向量的准范数?

时间:2018-05-10 11:23:12

标签: r vector statistics

准范数的概念与Lp范数相同,但0<p<1

如果我们使用type="2",则表示L2范数,type="1"表示L1范数。

我在R中试过这个,但是对于准规范不起作用。

所以,我想知道是否有人可以帮忙解决这个问题,好吗?

e <- as.matrix(c(1,1,1,1,1)) 
norm(e, type="0.5")

1 个答案:

答案 0 :(得分:2)

首先,检查特定R函数的文档总是有帮助的:

?norm

为您提供norm()

  

使用LAPACK计算x的矩阵范数。范数可以是一个(“O”)范数,无穷大(“I”)范数,Frobenius(“F”)范数,矩阵元素中的最大模数(“M”),或“谱”或“2” - 范数,由类型的值确定。

并且类型有效参数为

  

“O”,“o”或“1”   指定一个标准,(最大绝对列总和);

     

“我”或“我”   指定无穷大范数(最大绝对行和);

     

“F”或“f”   指定Frobenius范数(x的欧几里德范数被视为向量);

     

“M”或“m”   指定x中所有元素的最大模数;和

     

“2”   指定“谱”或2范数,它是x的最大奇异值(svd)。

第二,回答你的问题。您可以实现一个函数来自己计算向量的任何Lp范数:

lpnorm <- function(x, p){
  n <- sum(abs(x)^p))^(1/p)
  return(n)
}
a <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8))
lpnorm(a, 1)
# 36
norm(a, type="1")
# 36
lpnorm(a, 2)
# 14.28286
norm(a, type="2")
# 14.28286
lpnorm(a, 0.5)
# 265.8857