如何以浮点精度查找数组中的重复元素?例如a = [1.2 1 3 3.15 6 8]应该给我索引位置idx = [1 3],其中1和1.2被视为相同,类似地3和3.15被视为相同。
答案 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
。整数不会考虑十进制数字。