通过跳过3D阵列中的零元素加速matplotlib体素

fcwjkofz  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(117)

我正在尝试使用matplotlib绘制3D体素。我的数组总是256x256x256个零,其中一些元素设置为1。我测试的只是中间元素设置为1(参见下面的代码)。
我可以将voxelarray大小更改为100x100x100进行测试,需要20秒,但256x256x256需要5分钟以上(我的应用程序需要这个大小)。我喜欢只绘制非零元素,而不强迫matplotlib迭代每个空体素。我试着用NP。非零,但输出不是三维的,因此无法打印。有没有办法加快速度?

import numpy as np
import matplotlib as plt

voxelarray = np.zeros((256,256,256))
voxelarray[127:128, 127:128, 127:128] = 1

start_time = time.process_time()

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

ax.voxels(voxelarray)

ax.set_xlim([0,256])
ax.set_ylim([0,256])
ax.set_zlim([0,256])
ax.set_xlabel('0 - Dim')
ax.set_ylabel('1 - Dim')
ax.set_zlabel('2 - Dim')

final_time = time.process_time() - start_time
print(final_time) ```
mlmc2os5

mlmc2os51#

不,你需要每次迭代3d数组中的所有条目。
256^3是16。如果matplotlib函数的时间复杂度为O(n),那么256^3应该需要335秒(5分35秒),因为你说256^3需要超过5分钟。
可能有一种方法使用threading并将3d数组拆分为多个部分,在每个部分上运行图形,每个部分在单独的线程上运行,然后将图缝合在一起。

相关问题