我想在Matlab中生成一个向量,向量应该是非负的,并且一个范数应该等于我可以输入的东西(比如说1)。
我尝试在线搜索,但无法提出令人满意的建议。
答案 0 :(得分:2)
您可以使用rand
生成随机向量,然后使用norm
来计算向量的范数,通过该范数可以划分所有元素。然后,您可以将结果乘以输入值,以将其缩放到所需的长度。
如果你想要L1规范,你可以使用以下内容。
% This will use the L1 norm
vec = rand(1, 10);
vec = vec * scale ./ norm(vec, 1);
这可以推广到p
范数,其中包含以下内容:
vec = rand(1, 10);
vec = vec * scale ./ norm(vec, p);
答案 1 :(得分:1)
随机生成0
和1
之间的元素(即定义为非负数):
v = rand(n,1)
然后按照它的一个标准(即它现在有1
的一个标准)并乘以你想要的一个标准k
来扩展它:
V = k*v/norm(v,1)