在matlab中舍入到用户定义的数字

时间:2017-04-06 15:17:54

标签: matlab

我在舍入到用户定义的数字时遇到问题。

我有一个MxN矩阵,其数字介于-3和12之间。

然后我必须将矩阵中的每个数字四舍五入到[-3,0,2,4,7,10,12]的近似值。我有一些关于舍入和舍入函数的数字,但是无法弄清楚如何向特定数字舍入。

2 个答案:

答案 0 :(得分:2)

interp1'nearest'选项一起使用:

x = [-2.1, 1.5; 5.7, 10.8]; % data values
y = [-3, 0, 2, 4, 7, 10, 12]; % allowed values
result = interp1(y,y,x,'nearest');

这给出了

result =
    -3     2
     7    10

如果您更喜欢手动执行:计算所有成对绝对差异,找到每个数据值的最小化索引,并索引到允许值矩阵中:

[~, ind] = min(abs(bsxfun(@minus, x(:).',y(:))), [], 1);
result = reshape(y(ind), size(x));

答案 1 :(得分:1)

听起来你想要的是discretize function

>> % The set of values
>> setValues = [-3 0 2 4 7 10 12]';
>> % Find the midpoints between values to set as bin edges
>> binEdges = 0.5*(setValues(1:(end-1)) + setValues(2:end));
>> % Test a whole range of values
>> A = (-3.5:0.5:12.5)';
>> % Use discretize and include edges at -Inf and Inf to
>> % make sure we have the right # of bins
>> D = setValues(discretize(A, [-Inf; binEdges; Inf]));
>> % Compare the original values with the discretized version.
>> [A D]