본문 바로가기

개발자/Java

배열로부터 평균, 중간, 최소, 최대, 편차, 표준편차값 등을 계산하는 클래스

반응형



예전 신호처리 관련 개발할때 어디서 가져온 코드. 


주어진 배열로부터 평균, 중간, 최소, 최대, 편차, 표준편차값 등을 계산하는 클래스


ArraySummary.java  참고하세요~


//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// This file is part of dLife
// Copyright (c) 2010 Grant Braught. All rights reserved. 
// 
//     dLife is free software: you can redistribute it and/or modify
//     it under the terms of the GNU General Public License as published
//     by the Free Software Foundation, either version 3 of the License, 
//     or (at your option) any later version.
// 
//     dLife is distributed in the hope that it will be useful,
//     but WITHOUT ANY WARRANTY; without even the implied warranty 
//     of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
//     See the GNU General Public License for more details.
// 
//     You should have received a copy of the GNU General Public 
//     License along with dLife.  
//     If not, see .
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 배열로부터 평균, 중간, 최소, 최대, 편차, 표준편차값 등을 계산하는 클래스
 * @author Grant Braught
 * @author Dickinson College
 * @version May 3, 2005
 */
public class ArraySummary {

    /**
     * 배열의 평균값을 계산하는 메소드
     * 
     * @param arr
     * 			더블형 배열
     * @return 
     * 			배열의 평균값
     */
    public static double mean(double[] arr) {
        double total = 0;
        for (int i = 0; i < arr.length; i++) {
            total = total + arr[i];
        }
        return total / arr.length;
    }

    
    /**
     * 배열의 최대값을 찾는 메소드
     * 
     * @param arr
     * 			더블형 배열
     * @return 
     * 			배열의 최대값
     */
    public static double max(double[] arr) {
        int maxIndex = 0;
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > arr[maxIndex]) {
                maxIndex = i;
            }
        }
        return arr[maxIndex];
    }

    /**
     * 배열의 최대값 인덱스를 찾는 메소드
     * 
     * @param arr
     * 			더블형 배열
     * @return 
     * 			배열의 최대값 인덱스
     */
    public static int maxIndex(double[] arr) {
    	int maxIndex = 0;
    	for (int i = 1; i < arr.length; i++) {
            if (arr[i] > arr[maxIndex]) {
                maxIndex = i;
            }
        }
        return maxIndex;
    }
    
    /**
     * 배열의 최대값 인덱스를 찾는 메소드
     * 
     * @param arr
     * 			더블형 배열
     * @return 
     * 			배열의 최대값 인덱스
     */
    public static int[] maxIndex(double[][] arr)
    {
    	int maxIndexX = 0;
    	int maxIndexY = 0;
    	for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				if ( arr[i][j] > arr[maxIndexX][maxIndexY])
				{
					maxIndexX = i;
					maxIndexY = j;
				}
			}
		}
    	
    	return new int[] {maxIndexX ,maxIndexY};
    }
    
    /**
     * 배열의 최소값을 찾는 메소드
     *  
     * @param arr
     * 			더블형 배열
     * @return 
     * 			배열의 최소값
     */
    public static double min(double[] arr) {
        int minIndex = 0;
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] < arr[minIndex]) {
                minIndex = i;
            }
        }
        return arr[minIndex];
    }

    /**
     * 주어진 배열의 중간값을 찾는 메소드
     * 단, 해당 배열의 요소가 짝수개일 경우에는 구한 두개의 중간값중 낮은 값을 리턴함.
     * @param arr
     * 			더블형 배열
     * @return 
     * 			배열의 중간값
     */
    public static double median(double[] arr) {
        double[] arrClone = new double[arr.length];
        System.arraycopy(arr, 0, arrClone, 0, arr.length);
        Arrays.sort(arrClone);
        return arrClone[(int) (Math.round(arrClone.length / 2.0) - 1)];
    }
    
    /**
     * 배열의 편차값을 구하는 메소드
     * @param arr
     * 			더블형 배열
     * @return 
     * 			배열의 편차값
     */
    public static double variance(double[] arr) {
        return variance(arr, mean(arr));
    }

    /**
     * 배열의 편차값을 구하는 메소드
     * @param arr
     * 			더블형 배열
     * @param mean
     * 			더블형 배열의 평균값
     * @return
     * 			배열의 편차값
     */
    public static double variance(double[] arr, double mean) {
        double totalDev = 0;

        for (int i = 0; i < arr.length; i++) {
            totalDev = totalDev + (mean - arr[i]) * (mean - arr[i]);
        }

        // Sample estimate of variance so divide by n-1.
        return totalDev / (arr.length - 1);
    }

    /**
     * 배열의 표준편차값을 구하는 메소드
     * @param variance
     * 			편차
     * @return
     * 			표준편차
     */
    public static double stdDev(double variance) {
        return Math.sqrt(variance);
    }

    /**
     * 배열의 표준편차값을 구하는 메소드
     * 
     * @param arr
     * 			더블형 배열
     * @return
     * 			표준편차
     */
    public static double stdDev(double[] arr) {
        return stdDev(variance(arr));
    }

    /**
     * 배열간의 RMS차를 구하는 메소드
     * 
     * @param arr1
     * 			더블형 배열
     * @param arr
     * 			더블형 배열
     * @return 
     * 			RMS차
     * @throws IllegalArgumentException
     * 			배열간의 길이가 다를 경우
     */
    public static double RMS(double[] arr1, double[] arr2) {
        if (arr1.length != arr2.length) {
            throw new IllegalArgumentException("getRMSDifference: aar1 and aar2 "
                    + "must be the same length.");
        }

        double totalSqDiff = 0;
        for (int i = 0; i < arr1.length; i++) {
            double diff = (arr1[i] - arr2[i]);
            totalSqDiff += diff * diff;
        }

        return Math.sqrt(totalSqDiff / arr1.length);
    }	
}




반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩