我有一个场景对象,我想把所有的通道加载到一个数字数组的形状(24,24,3)。其中3是频道的数目。
scene_xybox = scn.crop(xy_bbox=box)
我必须选择每一个频道:
channel= scene_xybox['VIS006'].values
重复,最后堆叠。是否有一种方法可以得到带一行的堆叠的数字数组。
这需要5秒为每个框,我有许多文件,它将需要非常长的时间来做相同的操作,在一个图像中的多个框,多个图像。
发布于 2022-04-05 11:58:46
一个完美的答案可能需要你提供更多的信息,说明你的最终目标是什么,你删掉了多少个“盒子”,等等。但我会先看看我能把什么弄清楚。我假设您根本没有在代码中使用Scene.resample
重采样数据。
Satpy使用dask,所以如果可能的话,最好是一次计算所有的东西。或者至少限制计算事物的次数(.values
计算dask数组)。如果您有大量的框要裁剪,并且您的系统有可用的内存,您可能需要自己计算所有bboxes的切片(我认为有一些方法可以帮助这一点),加载整个图像(请参阅下面的xr.concat ),然后使用基本的切片技术获取每个切框。这将避免每次调用.values
时从磁盘加载数据,但也将真正帮助处理其他文件,因为切片在任何时候都应该是相同的(特殊的仪器情况除外)。
你说你希望最终的形状是(rows, cols, N)
。你不能拥有(N, rows, cols)
有什么好的理由吗?后者应该更快,因为数组是以它们原来的连续形式出现的。如果您在这之后所做的任何处理都可以用dask来完成,这将很好地处理将要完成的任务。
您可以使用xr.concat
,一次传递所有DataArrays,然后调用.values
以获得下面的完整numpy数组。这应该同时计算所有的带。类似于:
final_arr = xr.concat([scn['VIS006'], scn['band2'], scn['band3']], "bands").values
https://stackoverflow.com/questions/71756336
复制相似问题