Matlab:缩放范围

问题描述:

x = randn(100,1)在范围[-1,1]中创建一个正态分布数的序列。Matlab:缩放范围

我想通过在3个子区域[-1,0,1]中表示上述范围来指定字符或数字,例如'1','0',' - 1'。我无法理解我该怎么做。我能为均匀分布时做x = rand(100,1)为3个子区域[0,1/3],(1/3,2/3],(2/3,1]

x = rand(100,1) 
for i =1:100 
if x(i) <1/3 
x(i) = -1; 
elseif x(i) < 2/3 
    x(i) = 0; 
else x(i)=1; 
end 
end 

可有人请出示时的数字是从正态分布生成我如何应用相同的技术?

+1

a。根据定义,正态随机数在-inf和+ inf之间。湾你的分区域是什么? [-inf -1],( - 1 1),[1 inf]? – Tal

由于@Tal表示,正态分布范围从-Inf+Inf

此外,您的代码并不反映您在范围方面的解释。

当您更正范围时,可以使用矩阵索引来分配没有for循环的值(这将会更有效)。

例如:

此代码将分配:

  • -1到范围(-Inf,-1/3)
  • 0至范围[-1/3,1/3]
  • 1到范围(1/3,+ Inf文件)

x(x < -1/3) = -1; 
x((x <= 1/3) & (x ~= -1)) = 0; 
x(x > 1/3) = 1; 

注意这是因为-1 < -1/3,那么第一分配不与第二个重叠。否则,你将需要一个辅助变量。

+0

谢谢你的回复。我想知道是否可以根据分布的均值创建范围。对任何分布f(x)说,如果平均值(x)用于创建区间,那么对于[0,1]中的x和当[-1,1]中的x如何创建区间?我认为对于[0,1]中的x:范围是[0,-mean(x)],(-mean(x),+ mean(x)],(mean(x),1]?对于x在[-1,1]中,范围是多少?请你纠正我错在哪里?非常感谢你的时间。 – SKM