我有一个值为Phi_Values
的向量和一个矩阵Phi_occurences
,其中包含Phi_Values
的每个值的出现次数,以及每个depht的出现次数(每行代表一个深度)< / p>
作为一个例子(不是真正的尺寸和价值,真的太大了,不能粘贴在这里)
Phi_values =
0.2000 0.3000 0.4000 0.5000 0.6000
和
Phi_occurences =
2000 3000 20 1980 3000
1000 2000 3000 4000 0
4000 0 1000 3000 2000
所以在这个例子中,对于深度1,有2000次出现0.2次,3000次出现0.3次,20次出现0.4次,......
对于每个深度,累计发生10000次。 由于某些原因,我需要获得400次累积发生但保持相同的比例(作为例子,如果我有20%的发生次数是Phi_values(1),我想保留转化后的那些20%。
我所做的是将Phi_Occurrences
除以25(10 000/25 = 400),然后应用round
。
Phi_occurences = round(Phi_occurences/25)
但是随后每个深度的累积出现次数不再是400,但是由于该回合,或多或少 400,当我需要400时..
我想了一会儿,我无法弄清楚如何在保持比例与原始比例尽可能接近的情况下获得精确的出现次数
TL; DR :我需要将正整数矩阵(有10 000行的总和)除以25,将结果放在整数中,这样我得到一个总和精确到400,线比例尽可能接近原始矩阵。
编辑:例如,如果
Phi_occurences(1) =
2506 2507 2506 2481
然后
Phi_occurences(1)/25 =
100.2400 100.2800 100.2400 99.2400
sum(Phi_occurences(1)/25) =
400
sum(round(Phi_occurences(1)/25)) =
399
答案 0 :(得分:1)
那么,在这些情况下,您可以检查最高余数并将该数字加1以使其为400.您的示例,
clc
clear
a = [2506 2507 2506 2481];
a = a./25;
b = round(a);
if sum(b) ~= 400
[~, m] = max(rem(a, b));
b(m) = b(m) + 1;
end
sum(b)
fprintf('\t\ta\tb\n');
disp([a' b']);
给出,
ans =
400
a b
100.2400 100.0000
100.2800 101.0000
100.2400 100.0000
99.2400 99.0000