循环在3D numpy数组的第一维上,通过切片创建一个更小的3D数组

时间:2014-07-16 13:40:08

标签: python arrays numpy 3d netcdf

这是我的第一篇文章,如果格式不正确,请道歉。我正在为我的硕士论文写一些代码,我正在研究阿拉斯加海岸附近海冰的卫星图像。我正在使用的卫星仪器有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数组,但是这个数组中的所有值都是相同的,即循环没有工作。 我希望我能够很好地解释这一点,我知道这不应该太困难,但我努力让我的大脑正常工作。

非常感谢

亚历

2 个答案:

答案 0 :(得分:0)

怎么样:

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

然后没有必要预先分配数组。

答案 1 :(得分:0)

这里不需要迭代3D数组。 记得当你想对数组的元素执行某些操作时(可能是在获得更短的数组之后),那么你需要迭代它...当你想从现有数据创建另一个子数组时,总有一种方法可以摆脱它在大多数情况下迭代。你只需要创建子数组(这里python的行为就好像它的函数式编程一样) 这里可能的解决方法是使用语法

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

当你不开始时:停止它假设一切,当你不给步时它假设步骤为1个单位

所以使用 NIR_BRF = NIR_data[:, 256:266, 112:122]