Потребовалось посчитать число уникальных цветов в 24-битном PNG. Можно тупо перебирать тройки байт RGB, сравнивать с пополняемым массивом, добавлять в массив, когда появляется что-то новое. Можно воспользоваться средствами Numpy для поиска уникального элемента в массиве: reshape-ом развернуть 3-мерный массив из 1000х1000х3 в 1000000х3, затем unique-ом найти уникальные тройки.
from PIL import Image
import numpy as np
im = Image.open('.....')
ar = np.asarray(im)
arlinear = np.reshape( ar, (ar.shape[0]*ar.shape[1], 3) )
print( len( np.unique( arlinear, axis=0 ) ) )
colourarray = []
for line in ar:
for pixel in line:
if not np.any(colourarray==pixel):
colourarray.append(pixel)
print(len(colourarray))
Результат отличается. Почему?
Ответ: unique отработал правильно. Проблема в any(): np.any([[True, False], [False, False]]) будет True. Сравнение циклом находит совпадения, когда совпадает 1 цвет.