только целочисленные скалярные массивы могут быть преобразованы в ошибку скалярного индекса - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь выполнить сортировку сегментов и получаю сообщение об ошибке «только целочисленные скалярные массивы могут быть преобразованы в скалярный индекс», но я не уверен, в чем проблема. Любая помощь будет оценена!

def bucketSort(self, array):
    n = len(array)
    B = [[]for i in range(n)]

    for j in range(array):
        index = math.floor(array[j]*n)
        B[int(index)].append(array[j])

    for k in range(len(B)):
        B[k] = self.insertionSort(B[k])

    m = 0
    for i in range(len(B)):
        for j in range(len(B[i])):
            array[m] = B[i][j]
            m+=1
    return array

обратная связь:

<ipython-input-109-fe41639833f2> in bucketSort(self, array)
     90         B = [[]for i in range(n)]
     91 
---> 92         for j in range(array):
     93             index = math.floor(array[j]*n)
     94             B[int(index)].append(array[j])

TypeError: only integer scalar arrays can be converted to a scalar index```

1 Ответ

1 голос
/ 14 марта 2020

tl; dr: range() ожидает целые числа в качестве аргументов, в то время как array - это массив, а не целое число. Из вашего варианта использования кажется, что вы должны использовать range(len(array)) вместо range(array).


Длинная версия:

Python 3 range() встроенный метод фактически создает объект итератора, который при повторении возвращает последовательность целых чисел. Из документации аргументы, передаваемые range(), должны иметь либо значения int, либо некоторого типа, который реализует метод __index__. Метод __index__ - это специальный метод dunder , который позволяет использовать определенный пользователем объект в качестве индекса при индексации массива. Метод должен возвращать int. Массивы

NumPy реализуют метод __index__, однако он возвращает int только тогда, когда объект массива действительно является скаляром, т. Е. Когда массив имеет форму (). Когда массив не является скаляром, он выдает это TypeError исключение, которое вы видите. Например:

import numpy as np
l = [1, 2, 3]
np.array(1).shape    # == ()
l[np.array(1)]       # == l[1]
np.array([1]).shape  # == (1,)
l[np.array([1])]     # TypeError: only integer scalar arrays can be converted to a scalar index
l['string']          # TypeError: list indices must be integers or slices, not str
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...