如何在浮点精度中找到数组中的重复元素?

时间:2015-07-03 06:23:36

标签: arrays sorting

如何以浮点精度查找数组中的重复元素?例如a = [1.2 1 3 3.15 6 8]应该给我索引位置idx = [1 3],其中1和1.2被视为相同,类似地3和3.15被视为相同。

3 个答案:

答案 0 :(得分:0)

Python,快速而肮脏:

list_a=[1.2 1 3 3.15 6 8]  
holding_list=[]

for x in list_a:
    if int(x) in holding_list:
        pass
    else:
        holding_list.append(x)

print holding_list

取决于所需的输出

,可以取代int四舍五入值

答案 1 :(得分:0)

在整数数组的情况下,查找重复项是一个微不足道的问题 找到具有双精度声音的重复声音肯定是暧昧的。

例如,您有值:

1.0 1.15 1.3

哪些应该重复?这三个人都是什么?

如果我们删除第二个值,那么所有这些值都不会重复?这是一种奇怪的行为。

让我们在这种情况下描述重复的值如下:

  

舍入整数值的数组中,如果至少有一个值具有相同的值,则值X将被复制。

这很重要,因为epsilon可能存在另一种逻辑差异。例如,对于epsilon = 0.2,2.9和3.4将不会重复。但是,在舍入值的情况下 - 它们会。

由于您尚未指定语言,我将使用C#。很容易将它翻译成C,C ++或Java 现在我们可以这样实现它:

double[] doubleArr = new double[] { 1.2, 1.0, 3.0, 3.15, 6.0, 8.0 };
int[] integerArr;
List<int> duplicatedIndices = new List<int>();

integerArr = doubleArr.Select(x => (int)Math.Round(x));

for (int i = 0; i < integerArr.Length; i++)
{
    if (integerArr.Count(x => x == integerArr[i]) > 1) // don't forget about self
        duplicatedIndices.Add(i);
}

对于数组[1.2,1.0,3.0,3.15,6.0,8.0],它将返回

0, 1, 2, 3

因为所有这些都有重复的值。

答案 2 :(得分:-1)

希望数组中的元素已排序。在尝试查找重复项时,将元素强制转换为int。整数不会考虑十进制数字。