将矢量转换为具有不同中值的圆形空间

时间:2016-06-28 05:59:35

标签: matlab

我有一个从1到11的10个随机数的向量(向量1:11的中位数是6)。

min = 1;
max = 11;
nVector = 10;
VectorRand = randi([min max],1,nVector);

我想将VectorRand中的值转换为包含11个值的循环数组,但具有不同的中位数。例如,中位数2:

-5(8) -4(9) -3(10) -2(11) -1(1) 0(2) +1(3) +2(4) +3(5) +4(6) +5(7)
Result: 8 9 10 11 1 - 2 - 3 4 5 6 7

在VectorRand = [1 3 8 4 6 8 5 2 6 8 10]的情况下     结果:-1 1 -5 2 4 -5 3 0 4 -5 -3

其中中位数(在这种情况下为2)变为零,所有其他值均按照距中位数的距离进行平移(例如8 = -5,9 = -4 10 = -3等等)。

1 个答案:

答案 0 :(得分:0)

说明令人困惑,但我想知道你想要什么:

>> % Set parameters
>> minVal = 1;
>> maxVal = 11;
>> newMedian = 2;
>> % Determine mapping
>> currMedian = median(minVal:maxVal);
>> map = circshift((minVal:maxVal) - currMedian, [0 newMedian - currMedian]);

这会改变值的范围,使中位数为0(这最终会给你距目标中位数的距离),然后旋转它,使目标中位数处于值排序的中心值。现在,通过构建映射,您可以将矢量映射到这个新的循环环:

>> VectorRand = [1 3 8 4 6 8 5 2 6 8 10];
>> Result = map(VectorRand)
Result =
    -1     1    -5     2     4    -5     3     0     4    -5    -3