#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 вы говорите