![](/img/trans.png)
[英]Python 3: Numpy 3d array to Pandas dataframe with 1st dimension values as columns and rows/cols position paired in one column
[英]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.