我正在尝试“自动”生成向量0.01, 0.03, 0.1, 0.3, 1, 3, 10, 30
(在乘法空间中)。
我知道linspace和logspace函数,但我找不到任何类似的乘法空间函数。
有吗?否则,如何生成一个我需要的矢量?
答案 0 :(得分:3)
使用bsxfun
的简单方法,也考虑乘以较小的空格:
x = [0.01,0.03,0.05] % initial vector, works for various lengths
n = 12; % times it should get multiplied in rising direction
m = 3; % times it should get multiplied in falling direction
Z = bsxfun( @times, x(:), 10.^(-m:n) )
Z = Z(:)
% if preferred, bulky one-liner:
% Z = reshape( bsxfun( @times, x(:), 10.^(-m:n) ) , 1 , [])
我假设乘法向量乘以,例如:
10.^(0:n) = 1 10 100 1000 10000 100000 ....
但自定义向量Y
也是可能的:
Z = bsxfun( @times, x(:), Y(:)' ) Z = Z(:)
答案 1 :(得分:3)
可以帮助您以非常简单和紧凑的方式实现这一目标的功能是Kronecker张量积kron
。
您可以使用它将thewaywewalk's answer重写为:
v = [0.01;0.03;0.05]; % initial vector
emin = -3; % minimal exponent
emax = 12; % maximal exponent
Z = kron(10.^(emin:emax)',v(:))
应该给你完全相同的结果。
答案 2 :(得分:2)
效率不高,但这会产生你想要的效果。在这种情况下,inputvec
是您的初始向量[0.01 0.03]
,multiplier
是10
。所需字符串n
的长度为8
。 n
应为nn
(输入向量的长度)的倍数
function newvec=multispace(n,inputvec,multiplier)
nn=length(inputvec);
newvec=zeros(1,n);
newvec(1:nn)=inputvec;
for i=1:n/nn-1
newvec(i*nn+1:(i+1)*nn)=(newvec((i-1)*nn+1:(i)*nn)).*multiplier;
end
end