繁体   English   中英

通过切片循环遍历1D numpy数组的第一维以创建更小的3D数组

[英]Looping over 1st dimension of 3D numpy array to create a smaller 3D array, via slicing

这是我的第一篇文章,如果格式不正确,我深表歉意。 我正在为硕士论文编写一些代码,其中我正在研究阿拉斯加海岸附近海冰的卫星图像。 我使用的卫星仪器有9个摄像头,因此对于每个图像/波段,我有9个子数据集,我试图对其进行遍历:NIR_data是一个3D numpy数组,具有以下维度:9,512,256。 我正在尝试创建一个新的3D数组,它是原始数组的10x10子集,由像素坐标[256:266,112:122]定义。 因此,如果我只是对1个文件进行处理,则代码将是:

NIR_BRF = NIR_data[i][256:266,112:122]

因此,尝试遍历NIR_data数组的第一维,这是我得到的最接近的值:

for i,f in enumerate(NIR_data):
    NIR_BRF[i] = NIR_data[i][256:266,112:122]

其中NIR_BRF是一个预定义的空数组,其值为9,10,10。 结果是一个9,10,10数组,但是该数组中的所有值都相同,即循环无效。 我希望我已经解释得足够好了,我知道这应该不太困难,但是我正在努力使自己的大脑正常工作。

非常感谢

亚历克斯

怎么样:

NIR_BRF = NIR_data[:, 256:266, 112:122]

这样就无需预先分配数组。

此处无需遍历3D数组。 请记住,当您想对数组的元素执行某些操作时(可能是在获取较短的数组之后),那么您将需要对其进行迭代..当您想从现有的数组中创建另一个子数组时,总有一种方法可以摆脱在大多数情况下都是迭代。在这里,您只需要创建子数组(此处python的行为就像其功能性编程语言一样),此处可能的解决方法是使用语法

 [dim1_start:dim1_stop:dim1_step,dim2_start:dim2_stop:dim2_step,...dimn_start:dimn_stop:dimn_step]

当您不给出start:stop时,它假定一切,而当您不给出步骤时,它假定step为1个单位

因此请使用NIR_BRF = NIR_data[:, 256:266, 112:122]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM