新手问题,不知道为什么我的程序会做它的作用以及如何解决它

时间:2015-09-12 18:07:49

标签: python numpy

作为大学课程的一部分,我已经在python中编写了超过2周的编码。

我现在将尝试描述该计划的目的,但由于我的英语似乎不够,所以它有点难。

在我的课程中,我要编写一个带有numpy数组的函数。该函数应编译一个在小数点前具有相同整数的数字列表,但仅限于有3个或更多具有相同整数的数字。

例如,如果列表中包含1.4,1.5和1.6,则所有三个都将编译到结果列表中。如果输入列表是2.3,2.5,3.5,则不会编译任何内容,因为没有相同整数出现三次的情况。

我的代码如下所示:

def removeIncomplete2(id):

    ip = id
    for N in range(np.size(ip)):
        ip[N] = np.round(ip[N]-0.5,0)

    x = 0
       for N in range(np.size(ip)):

            for n in range(np.size(ip)):
                if ip[N]==ip[n]:
                    x = x + 1
            if x > 3 and x != 0:
                id = np.delete(id, id[N])

    x = 0

    id = id[id > 0]
    return id

我输入的测试是:

removeIncomplete2(numpy.array ([1.3, 2.2, 2.3, 4.2, 5.1, 3.2, 5.3, 3.3, 2.1, 1.1, 5.2, 3.1])

它应该返回

[ 2.2 2.3 5.1 3.2 5.3 3.3 2.1 5.2 3.1]

但返回:

[ 1.  2.  2.  4.  5.  3.  5.  3.  2.  1.  5.  3.]

我被困住了,欢迎任何建议。我是这个编码的新手,我不知道它为什么吐出它的作用,我不知道如何解决它。 任何帮助都很受欢迎!

1 个答案:

答案 0 :(得分:1)

我想我得到了你要求的东西。请检查一下。如果它是你想要的,我们可以更多地澄清原始问题。它会产生您指定的数字。

import math
import numpy

original_numbers = numpy.array([1.3, 2.2, 2.3, 4.2, 5.1, 3.2, 5.3, 3.3, 2.1, 1.1, 5.2, 3.1])
result_specification = numpy.array([2.2, 2.3, 5.1, 3.2, 5.3, 3.3, 2.1, 5.2, 3.1])


def remove_incomplete(numbers):
    whole_number_tracker = {}
    # track occurrences of each whole number
    for number in numbers:
        whole_number = int(math.floor(number))
        whole_number_tracker.setdefault(whole_number, []).append(number)
    # compile all numbers that have more than three of the same whole number
    result = []
    for whole_number, full_numbers in whole_number_tracker.items():
        if len(full_numbers) >= 3:
            result.extend(full_numbers)
    return result


result = remove_incomplete(original_numbers)
print(result)
print(result_specification)