Проблема с целыми значениями и как предоставить синтаксис для отображения значения Int в Python

#python #integer

#python #целое число

Вопрос:

В настоящее время я сталкиваюсь с ошибкой, которая описывается следующим образом: допустимыми индексами являются только целые числа, slices ( : ), ellipsis ( ... ), numpy.newaxis ( None ) и целочисленные или логические массивы. Я действительно понимаю проблему. Однако я не могу исправить это в коде Python, поскольку я всего лишь новичок в использовании Python. полный код находится по ссылке: ‘https://homepages.ecs.vuw.ac.nz /~marslast/Code/Ch9/TSP.py » отчет терминала таков:

 ((1, 2, 3, 4, 0), 2.4225597326923185)
0.0004763603210449219
Greedy search
Traceback (most recent call last):
  File "TSP.py", line 183, in <module>
    runAll()
  File "TSP.py", line 167, in runAll
    print (greedy(distances))
  File "TSP.py", line 57, in greedy
    dist[:,cityOrder[0]] = np.Inf
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
  

Недопустимый код:

     nCities = np.shape(distances)[0]
    distanceTravelled = 0
    
    # Need a version of the matrix we can trash
    dist = distances.copy()

    cityOrder = np.zeros(nCities)
    cityOrder[0] = np.random.randint(nCities)
    dist[:,cityOrder[0]] = np.Inf

    for i in range(nCities-1):
        cityOrder[i 1] = np.argmin(dist[cityOrder[i],:])
        distanceTravelled   = dist[cityOrder[i],cityOrder[i 1]]
        # Now exclude the chance of travelling to that city again
        dist[:,cityOrder[i 1]] = np.Inf
    
    # Now return to the original city
    distanceTravelled  = distances[cityOrder[nCities-1],0]

    return cityOrder, distanceTravelled ```
  

Ответ №1:

Проблема возникает из-за использования numpy.zeros (doc здесь). Как вы можете видеть, по умолчанию dtype выходной массив равен float . И вы не можете использовать значение с плавающей точкой для индексации массива.

Быстрым решением было бы указать dtype cityOrder значение int :

  cityOrder = np.zeros(nCities, dtype=int)