首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SatPy一次加载所有通道

SatPy一次加载所有通道
EN

Stack Overflow用户
提问于 2022-04-05 09:55:02
回答 1查看 47关注 0票数 2

我有一个场景对象,我想把所有的通道加载到一个数字数组的形状(24,24,3)。其中3是频道的数目。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scene_xybox = scn.crop(xy_bbox=box)

我必须选择每一个频道:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
channel= scene_xybox['VIS006'].values

重复,最后堆叠。是否有一种方法可以得到带一行的堆叠的数字数组。

这需要5秒为每个框,我有许多文件,它将需要非常长的时间来做相同的操作,在一个图像中的多个框,多个图像。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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数组。这应该同时计算所有的带。类似于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final_arr = xr.concat([scn['VIS006'], scn['band2'], scn['band3']], "bands").values
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71756336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文