Я бы распечатал изображения по индексу 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
да, я сделал это типа numpy.ndarray
argwhere
не производит -1
(например, некоторые методы поиска строк или списков). Массив будет иметь 0 строк, если он не найдет совпадения. Я бы предложил напечатать c==n
, np.where(c==n)
и np.argwhere(c==n)
, чтобы лучше понять, что делает этот код.
Посмотрите на документ 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
.
Лучше всего опубликовать минимальный реконструируемый пример, т. е. другие люди должны иметь возможность скопировать и вставить код и запустить его. Более того, если вы опубликуете хотя бы пару строк трассировки (а не просто ошибку), мы сможем сказать, где именно происходит ошибка.
технически argwhere создает массив 2d
@Snowbunting спасибо, c
это список как в c = [1 1 1 0 1 2 2 3 4 1 3]
печать I
дает мне [3]
типа numpy.ndarray
np.argwhere
в моем списке возвращает список из одного элемента, к которому я получил доступ с помощью i[0]
еще раз спасибо @Snowbunting :)
Вы смотрели на вывод
argwhere
, наi
? Какова цель теста -1?