Ordering colors into a multidimensional list
As far as performance goes, you definitely need to understand your bottlenecks - profile the code properly and try to see what takes the most time - querying the database, converting hex to rgb or something else.

Here are few observations though:


don't do exists() and then filter() - just do filter() right away - it will return an empty queryset if no results
I am not sure if there is much sense in making a numpy.array - see if removing it would make a positive impact on performance
you don't need to keep track of indexes and then append to different lists based on an index - what if you would just collect the current results and then append to the resulting list at the end (see what I mean in the code below)
if a color starts with # you probably don't need to query the database at all


At the end, you may get something along these lines:

def orderDimentionalRGB(list_of_colors):
    results = []

    for color in list_of_colors:
        current_result = []

        if color.startswith("#"):
            current_result.append(hex_to_rgb(color))
        else:
            db_result = Color.objects.filter(color=color)
            if db_result:
                db_colors = db_result.first().color_list.replace(',', '').split()
                current_result += [hex_to_rgb(db_color) for db_color in db_colors]

        if current_result:
            results.append(current_result)

    return results