我正在尝试将巨大的5D HD 5图像(使用h5 py读取)转换为可以被Napari读取的数组。然而,我只能提取它的3D堆栈(Z,X,Y),所以我必须在通道和时间上进行切换,并将所有4D数组合并组合成5D数组。然而,每个时间点大约需要1分钟,因此使用我当前的代码,每个数据文件可能需要一个多小时。
目前,我正在将每个通道的所有数组追加到一个列表中,将列表转换为数组,然后存储在另一个列表中。在遍历所有时间点后,我将列表转换为数组。我尝试先将所有数组追加到一个列表中,然后再转换为数组,我试着堆叠数组,但似乎都很慢。2有什么想法可以更快地加速和/或更快地将多通道图像转换为数组吗?谢谢你,谢谢
combined_list = []
for i in timepoints:
im = file.get('DataSet')
res0 = im.get('ResolutionLevel 0')
data = res0.get('TimePoint '+ str(i))
auto = data.get('Channel 0')
stack1 = auto.get('Data')
auto = data.get('Channel 0')
stack2 = auto.get('Data')
combined_stack = np.asarray([stack1,stack2])
combined_list.append(combined_stack)
image = np.asarray(combined_list)
字符串
作为参考,图像约为(60,3,48,2048,5888)(TCZYX)
1条答案
按热度按时间sycxhyv71#
您正在进行大量的数据操作:1)将数组追加到列表中,2)将列表转换为数组,3)存储到另一个列表中,4)最后将第二个列表转换为数组。我有99%的把握,这会导致性能问题。请改为创建目标
image
数组(作为一个适当大小的空数组),然后直接读取和加载数据到它。这样更简单,更快。“我只能提取它的3D堆栈(Z,X,Y)"是什么意思?h5 py数据集可以使用NumPy表示法进行切片,因此切片和堆栈所需的数据应该“相对容易”(如果您了解该模式)。
鉴于你的帖子缺乏细节,我需要更多的信息来写答案。请记录H5文件的模式。或者像@dankal444所说的,提供一个具有类似模式的最小的、可重复的示例。
我试图创建一个示例文件来模仿你的代码,但无法从你的代码中推断出模式。请参阅下面的注解:
这是有道理的:
字符串
它读取名为“DataSet”的H5数据集,并以数组
im
的形式返回:im
的数据类型和形状是什么?你想用这条线做什么?
型
它是应用了numpy数组的字典
.get()
语法(无效):.get()
语法继续使用data
、auto
和stack1/stack2
型
最后,看起来
stack1
和stack2
引用了相同的对象--这是一个拼写错误吗?