我有一个从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等等)。
答案 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