我正在使用大型文件(大于8gb)的8位3D显微断层图数据,我需要在用户通过滚动条调用的不同轴上绘制此图像的切片,因此我将使用matplotlib。但是当我尝试访问第三轴时,numpy变得非常慢。有没有其他方法可以更有效地做到这一点?
这是访问数据切片的代码以及获取每个轴的最大值的时间:
import numpy as np
import timeit
image1 = 'tomo-2048x2048x2048_8bit.b'
fd = open(image1, 'rb')
width = 2048
height = 2048
slices = 2048
img = np.memmap(image1, dtype=np.uint8, shape=(slices, width, height))
fd.close()
valinit = 1024
s = []
for i in xrange(3):
s.append([slice(valinit-1, valinit, None) if j == i else slice(None) for j in xrange(3)])
for i in xrange(3):
start = timeit.default_timer()
print(img[s[i]].squeeze().max())
stop = timeit.default_timer()
print("Run time: %f") %(stop - start)
输出:
202
Run time: 0.014847
255
Run time: 0.026879
255
Run time: 92.322633