我想做的是让Matlab生成一个从0开始并向上一直到数组大小的值列表,这样当值出现时它会转换为这个值列表。
例如:
-0.7500 -0.5000 -0.2500 0 0.2500 0.5000 0.7500 1.0000
我希望这能产生:
0 1 2 3 4 5 6 7
因此,当我输入值-0.75时,它会将其转换为0,依此类推。我看到我的老师使用Matlab函数自动执行此操作但不幸的是他没有提供函数的名称(简单地说它存在)。如果没有人知道这个函数,我只会写一个,但我更喜欢Matlab开发人员编写的东西。
答案 0 :(得分:0)
让
x = [-0.7500 -0.5000 -0.2500 0 0.2500 0.5000 0.7500 1.0000];
value = -.75;
您可以使用
find(value==x)-1 %// -1 needed because Matlab indexing starts at 1, not 0
或
ismember(value, x)-1
谨防comparing floating-point values for equality。您可能希望包含公差:
tol = 1e-6; %// relative tolerance
find(abs(value./x-1)<tol)-1
您也可以使用map,虽然这似乎有点过分,并且存在潜在的浮点比较问题:
x = [-0.7500 -0.5000 -0.2500 0 0.2500 0.5000 0.7500 1.0000];
y = 0:numel(x)-1;
dict = containers.Map(x, y);
然后dict(-.75)
返回0
等