自动生成字典

时间:2014-09-28 16:19:50

标签: matlab

我想做的是让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开发人员编写的东西。

1 个答案:

答案 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