시소당
예전 신호처리 관련 개발할때 어디서 가져온 코드.
주어진 배열로부터 평균, 중간, 최소, 최대, 편차, 표준편차값 등을 계산하는 클래스
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);
}
}
출처: https://fishpoint.tistory.com/919 [기린]