Java 计算中值
谁能给我提供一个解决方案,如何找到我在下面的程序中得到的最终集群成员的中位数Java 计算中值,java,Java,谁能给我提供一个解决方案,如何找到我在下面的程序中得到的最终集群成员的中位数 package javaapplication; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.Locale; import java.io.BufferedInputStream; // to read text file line by line public class micr
package javaapplication;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import java.io.BufferedInputStream; // to read text file line by line
public class microclustering{
private static boolean contains(String target, String value)
{
boolean result= true;
for(int i=0; i<value.length();i++){
if(target.indexOf(value.charAt(i))== -1)
{
result=false;
return result;
}
}
// System.out.println(count+"intersection "+a+b);
return result;
}
private static String[] arragedata(String [] data,int i, int j)
{
int length=data.length;
String newdata [] = new String[length-1];
if(i==j)
return data;
if(j<i)
{
int temp=j;
j=i;
i=temp;
}
int temp=0;
for(int k=0;k<data.length;k++)
{
if(k!=i && k!=j)
{
newdata[temp]=data[k];
temp++;
}
else
if(k==i)
{
newdata[temp]=data[i]+","+data[j];
temp++;
}
}
return newdata;
}
private static int getIntersection(String a, String b, String []database)
{
int count=0;
boolean flag=true;
String [] first = a.split(",");
String [] second = b.split(",");
for(int i=0; i<database.length;i++)
{
for(int j=0;j<first.length;j++)
if (!contains(database[i],first[j]))
flag=false;
if(flag==true)
for(int j=0;j<second.length;j++)
if (!contains(database[i],second[j]))
flag=false;
if(flag==true)
count++;
else
flag=true;
}
return count;
}
private static int getUnion(String a, String b, String []database)
{
int count=0;
boolean flag=false;
String [] first = a.split(",");
String [] second = b.split(",");
for(int i=0; i<database.length;i++)
{
for(int j=0;j<first.length;j++)
if (contains(database[i],first[j]))
flag=true;
if(flag==false)
for(int j=0;j<second.length;j++)
if (contains(database[i],second[j]))
flag=true;
if(flag==true)
{
count++;
flag=false;
}
}
return count;
}
public static void main(String[] args) throws Exception{
// TODO code application logic here
String [] database = {"abcefo", "acg", "ei", "acdeg", "acegl", "ej", "abcefp", "acd", "acegm", "acegn"};
String [] data = {"ecabf", "cad", "cag", "ecag", "ca", "eca", "e"};
String format1 = "###0.00" ;
DecimalFormat fm1 = new DecimalFormat( format1,new DecimalFormatSymbols(Locale.US));
boolean flag=true;
do{
double threshold=0.5; // set threshold = 0.5
int min_i=-1,min_j=-1;
float [][] output= new float[data.length][data.length];
for(int i=0;i<data.length;i++){
for(int j=0;j<data.length;j++)
{
if(getUnion(data[i],data[j],database)!= 0){
int b=getIntersection(data[i],data[j],database);
int c=getUnion(data[i],data[j],database);
float a=((float)b)/((float)c);
output[i][j]=1-a;
if(i==j)
output[i][j]=0;
}
}
} System.out.print(" \t");
for(int j=0;j<data.length;j++)
{
System.out.print(data[j]+"\t");
}
System.out.print("\n");
for(int i=0;i<data.length;i++)
{
System.out.print(data[i]+"\t");
for(int j=0;j<data.length;j++)
{
System.out.print(fm1.format(output[i][j])+"\t");
if(output[i][j]>0 && output[i][j]<=threshold)
{
threshold=output[i][j];
min_i=i;
min_j=j;
} }
System.out.print("\n");
}
if(min_i!=-1 && min_j!=-1)
{
System.out.println("minimum distance"+output[min_i][min_j]+"\t");
try{
data=arragedata(data,min_i,min_j);
}catch(Exception e){
e.printStackTrace();
flag=false;
}
}
else
flag=false;
System.out.print("\n\n\n");
}while(flag==true);
}
}
我需要ca、eca、e和ecag、cag的中位数…大家都不清楚你的问题。如果要计算中值,请使用以下方法:-
- 按升序排序数组
- 如果数组长度为奇数,则中值为数组的中间值
- 如果数组长度为偶数,则中位数是数组的中下位值和中上位值的平均值
DescriptiveStatistics ds = new DescriptiveStatistics();
ds.addValue(10);
ds.addValue(10);
ds.addValue(30);
// median is basically 50th percentile
System.out.println(ds.getPercentile(50)); // displays 10
要计算中位数,您可以使用一个代码片段,例如在问题答案中给出的代码片段。Ok哇,试着问您的问题并删除细节。这本书读起来太多了。到底是什么问题?难道你不知道如何计算中位数吗?或者,就@Amir的观点来说,删除不相关的细节,只发布导致问题的部分。就目前而言,你不仅不清楚自己遇到了什么问题,而且还需要一段相当长的时间来审视整个事情,以确定从哪里开始。
DescriptiveStatistics ds = new DescriptiveStatistics();
ds.addValue(10);
ds.addValue(10);
ds.addValue(30);
// median is basically 50th percentile
System.out.println(ds.getPercentile(50)); // displays 10