已知兩個小數陣列,一個為資料一個為對應的權重,計算該資料的中位值
阿新 • • 發佈:2019-02-17
首先我們要知道權重的意思,舉個例子數字a,b,c對應的權重為,a1,b1,c1。那麼該組資料的平均值就是(a*a1+b*b1+c*c1)/(a1+b1+c1)。
知道了這些我們在來想思路
首先就是計算勸平均值,然後讓陣列的各個值與平均值相減,最後把他們相減的值的絕對值進行比較,得到最小的然後再加上平均值,得到該組資料的中位值。
下面是程式碼
public class median { /** * @param 計算中位數 */ public static void main(String[] args) { double[] num = new double[]{0.5,1.24,18,1.4,2.1,3.2,2.5,13,2.6,18,2.25,1.2,1.83,1.3,2.1}; double[] wnum = new double[]{0.8,0.2,1.98,1.4,2.1,3.8,2.1,2.12,0.5,5.6,1.1,1.2,3.5,1.2,1.5}; double[] menum = new double[num.length];//資料和平均值的差 double sum = 0;//算上權重後資料之和 double wsum = 0;//權重之和 double avg = 0;//平均值 for (int i = 0; i < num.length; i++) { sum = sum+num[i]*wnum[i]; wsum = wsum+wnum[i]; } avg = sum/wsum; for (int i = 0; i < menum.length; i++) {//計算各個資料和平均值的差 menum[i] = num[i]-avg; } for (int i = 0; i < menum.length; i++) {//利用氣泡排序得到資料和平均值之差絕對值最小的數 for (int j = 0; j < menum.length-1; j++) { if(Math.abs(menum[j]) > Math.abs(menum[j+1])){ double temp = menum[j]; menum[j] = menum[j+1]; menum[j+1] = temp; } } } double mddianNum = avg+menum[0]; System.out.println("中位值是:"+mddianNum); } }