【问题标题】:How to normalize a vector with negative values using matlab?如何使用matlab对具有负值的向量进行归一化?
【发布时间】:2014-01-06 22:10:50
【问题描述】:

对于给定的向量,比如v=[1 2 2],我需要进行归一化,结果矩阵中所有值的总和必须为 1。然后我使用 matlab 代码作为w=v/norm(v,1)。现在结果w=[0.2000 0.4000 0.4000]sum=0.2+0.4+0.4=1 并且满足条件。但是当使用负值时,结果是错误的。即如果v=[1 -2 2]w=v/norm(v,1)。现在结果是w=[0.2000 -0.4000 0.4000]sum = 0.2+(-0.4)+0.4 != 1。这个和不等于一。然后我使用w=abs(v)/norm(v,1)。这是正确的吗?

【问题讨论】:

  • 我相信这是正确的。请注意,当您取绝对值时,您正在“丢弃”有关单位向量方向的信息。
  • 您对规范化的具体要求是什么?不能只是求和为 1,因为 [1 -2 2] 已经求和为 1...
  • 取决于你的目的到底是什么。也许@Dan 的回答可以帮助您,如果没有,请详细说明您的要求。

标签: matlab


【解决方案1】:

我会考虑减去最低值:

V = v - min(v)
W = V/norm(V,1)

现在sum(W) 等于1,您不会像使用abs 那样丢弃信息

【讨论】:

  • @darthbith 我不认为这是一个要求。它的作用是对向量进行归一化,使其元素之和为 1。当然Vv 有不同的 norms
  • 我想这取决于 OP 的用途。如果他想要单位向量在原向量方向的长度(定义为1),abs方法应该是正确的。这就是我的假设。没有任何意图(即出于好奇:-)),用这种方法对向量进行归一化什么时候有用?
  • 当然,通过采用 1-范数,他没有得到单位向量,所以也许我完全不在这儿了! :-D
  • @darthbith 我不知道什么时候有用。我通常会标准化以使我的数据适合一个范围(例如 btw -1 和 1)。这只是确保值全部为 0 和 1 并且它们总和为 1 的一种方法。我不知道为什么这很有用,这只是我解释问题的方式。
  • @user3148302 在您正确定义您的要求之前无法帮助您。什么是S??请在此处解释您的总体目标。
【解决方案2】:

norm(v,1) 忽略符号(它计算 sum(abs(v)))。要使向量之和等于 1,您可以使用

w = v/sum(v);

【讨论】:

  • 当使用 this 时,如果 sum(v)==0 那么 w=inf
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
相关资源
最近更新 更多