Как получить индекс numpy.ndarray - PullRequest
1 голос
/ 30 мая 2019

Я хотел бы напечатать изображения по индексу i, но получаю ошибку only integer scalar arrays can be converted to a scalar index. Как я могу конвертировать I в int для каждой итерации

Я попытался заменить images[i] на images[n], это сработало, но не тот результат, который мне нужен.

c = [1 1 1 0 1 2 2 3 4 1 3]
#c here is list of cluster labels obtained after Affinity propagation 
num_clusters = len(set(c))
images = os.listdir(DIR_NAME)

for n in range(num_clusters):
   print("\n --- Images from cluster #%d ---" % n)
   for i in np.argwhere(c == n):
     if i != -1:
        print("Image %s" % images[i])

Я ожидаю, что выводом будет имя изображения, но вместо этого я получаю TypeError: only integer scalar arrays can be converted to a scalar index, потому что i имеет тип numpy.ndarray

1 Ответ

1 голос
/ 30 мая 2019

Посмотрите на документ np.argwhere, он не возвращает список целых чисел, а список списков

x = array([[0, 1, 2], [3, 4, 5]])
np.argwhere(x>1)
>>> array([[0, 2], [1, 0], [1, 1], [1, 2]])

y = np.array([0, 1, 2, 3, 4, 6, 7])
np.argwhere(y>3)
>>> array([[4], [5], [6]])

поэтому, не зная, как выглядит ваш c, я предполагаю, что ваш i будет иметь форму np.array([[3]]) вместо целого числа, и, следовательно, ваш код завершится ошибкой. Напечатайте i для проверки и извлечения (например, i[0][0] и проверки того, что он не пустой), прежде чем выполнить i != -1.

, требуемый индекс.

Meta

Рекомендуется опубликовать минимальный восстанавливаемый пример, т. Е. Другие люди должны иметь возможность скопировать и вставить код и запустить его. Более того, если вы разместите хотя бы пару строк трассировки (вместо просто ошибки), мы сможем определить, где именно происходит ошибка.

...