你在Java 7中检查了Arrays.hashcode吗?
public static int hashCode(double a[]) {
if (a == null)
return 0;
int result = 1;
for (double element : a) {
long bits = Double.doubleToLongBits(element);
result = 31 * result + (int)(bits ^ (bits >>> 32));
}
return result;
}
我不明白为什么@Marco13提到了“这不会为数组返回唯一值”。
更新
请参见@Macro13的评论原因,为什么它不能是唯一的..
更新
如果我们使用您的输入点绘制图形,(18个元素)有一个尖峰和3个低值,并且模式如下...
如果这是真的... 您可以找到峰值的平均值(1、4、8、12、16),并从剩余值中找到低平均值。
这样,您将拥有峰值平均值和低平均值。您可以找到唯一的数字来表示这两个值,同时使用双射算法 here来保留值。
此算法还提供了公式来反转,即从唯一值获取峰值和低平均值。
要查找唯一的配对< x; y >= x + (y + ( (( x +1 ) /2) * (( x +1 ) /2) ) )
还请参阅pdf第2页的Exercise 1以反转x和y。
用于查找平均值和查找匹配值。
public static double mean(double[] array){
double peakMean = 0;
double lowMean = 0;
for (int i = 0; i < array.length; i++) {
if ( (i+1) % 4 == 0 || i == 0){
peakMean = peakMean + array[i];
}else{
lowMean = lowMean + array[i];
}
}
peakMean = peakMean / 5;
lowMean = lowMean / 13;
return bijective(lowMean, peakMean);
}
public static double bijective(double x,double y){
double tmp = ( y + ((x+1)/2));
return x + ( tmp * tmp);
}
进行测试
public static void main(String[] args) {
double[] arrays = {0.07518284315321135,0.002963866526639678,0.002526139418225552,0.07444872939213325,0.0037219653347541617,0.0036979802877177715,0.0017920256571474585,0.07499695903867931,0.003477831820276616,0.003477831820276616,0.002036159171625004,0.07383539747505984,0.004311312204791184,0.0043352972518275745,0.0011786937400740452,0.07353130134299131,0.004339580295941216};
System.out.println(mean(arrays));
}
你可以使用峰值和低谷值来查找相似的图像。
char
表示。它需要是数字吗?如果是,为什么?如上所述,您无法仅使用10个(0-9)整数数字和长度较小的双精度浮点数唯一地表示这些双精度浮点数('Real')。但是根据我看到的数据集,您可以安全地删除实数中的第一个0、小数点和后面的0,并将它们表示为整数,但在将它们转换为整数数字表示时要注意前导零。 - user2880020