Как сгладить массив 3d в массив 1d - PullRequest
0 голосов
/ 31 января 2020

Мне нужен трехмерный вложенный массив. Как я могу сгладить это в 1d массив? (Из-за производительности) Я предполагаю, что мне нужно умножить некоторые вещи и т. Д. c. но я не самый лучший математик Спасибо!

def imgRGB(im):
    width, height = im.size

    #create matrix
    matrix = []
    for i in range(height):
        matrix.append([[0,0,0] for _ in range(width)])

    #get the rgb values
    for x in range(width):
        for y in range(height):
            r,g,b = im.getpixel((x,y))
            matrix[y][x][0] = r
            matrix[y][x][1] = g
            matrix[y][x][2] = b
    return matrix

Значения пикселей будут сравниваться с другими значениями RGB, чтобы найти наиболее близкое соответствие.

def getNearestColor(rgb):
    a = []
    for i in range(len(rgbValues)):
        d = ((rgbValues[i][0]-rgb[0])*0.3)**2 + ((rgbValues[i][1]-rgb[1])*0.59)**2 + ((rgbValues[i][2]-rgb[2])*0.11)**2
        a.append(d)
    list.sort(a)
    return a[0]

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Если я правильно понимаю, вы хотите сделать следующее:

rgbValues = np.array(im).reshape(-1,3)
a = np.sort(np.sum(((rgbValues - rgb)* [0.3, 0.59, 0.11])**2, axis=1))

, где rgb - список [r, g, b] для некоторых значений r, g, b.

0 голосов
/ 31 января 2020

Вы можете использовать ndarray.flatten, в вашем примере это будет matrix.flatten(). Это возвращает сглаженную версию вашей матрицы. Документация здесь также имеет пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...