Как ускорить загрузку matplotlib?

#python #matplotlib #3d

#python #matplotlib #3D

Вопрос:

Выполнение этого кода занимает невероятное количество времени ~ 33 минуты, как я могу сделать это быстрее.

 import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

points = [[x, y, z] for x in range(256) for y in range(256) for z in range(256)]
# --- ~11.32s ---
# rgb length = 16777216

ax.scatter([x[0] for x in points], [y[1] for y in points], [z[2] for z in points],
           color=[[color[0] / 255, color[1] / 255, color[2] / 255] for color in points])
# --- ~11m ---

plt.show()
# --- ~12m ---
  

введите описание изображения здесь

Редактировать:

 import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

every_point = [[x, y, z] for x in range(256) for y in range(256) for z in range(256)]
# rgb length = 16777216

points = [loc for loc in every_point if 255 in loc or 0 in loc]
# rgb length = 390152
# removed all unnecessary "below skin" points. only points visible will be loaded

ax.scatter([x[0] for x in points], [y[1] for y in points], [z[2] for z in points],
           color=[[color[0] / 255, color[1] / 255, color[2] / 255] for color in points])

plt.show()
# --- 46s ---
  

Этот код позволил почти в 50 раз быстрее, примерно за 46 секунд, полностью загрузить изображение. Код все еще довольно медленный, когда дело доходит до поворота изображения.

Комментарии:

1. Вы выполняете 4 итерации по 16,7 миллионам элементов points , а затем их необходимо обработать. Это займет некоторое время. Попробуйте использовать меньше данных.

2. Klaus D. Я намеренно использую 16,7М points , это количество цветов, доступных через rgb. Мне было интересно, есть ли какие-то способы сделать код немного быстрее. В настоящее время я использую pycharm, есть ли какие-либо модификации программного обеспечения, которые я мог бы добавить, чтобы ускорить время обработки.

3. Я добавил редактирование в исходный код, но он все еще довольно медленный при повороте изображения.

4. Вы знаете, что в любом случае сможете видеть только внешние точки рассеяния с такой плотностью точек? Почему бы просто не отобразить это как 3D-поверхность? Также подумайте о том, сможете ли вы на самом деле визуально отличить 24-битный куб rgb от, например, 15-битного куба rgb с немного большим размером точки рассеяния ?!

5. Я удалил все ненужные точки, но о каких 15-битных и 24-битных кубах rgb вы говорите