1、报错解释:
这个报错的大致意思是说在进行两个数组的运算时,数组的大小不匹配。因此不能直接进行运算。
参考了网络上一些关于这个报错的相关解决方案,发现触发这个报错的原因不唯一,因此我会先介绍一下我的代码编写背景,供遇到问题的各位先确认一下报错原因与我遇到的问题是否一致。最后提出检查及解决办法
2、代码背景:
我的代码运行文件夹为UAV_data,文件夹内包含了不同日期的无人机数据;而在每个日期的文件夹内,包含了1个真彩色影像、1张DSM影像、4个单波段影像以及6个植被指数影像共11份数据。在文件夹中的分布如下图所示:
而我要做的就是用代码读取出4张单波段影像,然后对其进行运算得到一些新的植被指数。因此编写了代码来循环读取并存储在data_list数组中:
data_list = []
for file_name in os.listdir(sub_folder_path):
file_path = os.path.join(sub_folder_path, file_name)
if file_path.endswith('.tif'):
data, meta = tiff_read(file_path)
data_list.append(data)
接下来我就要读取出NIR近红外波段数据和R红光波段数据来进行计算,按照常规的文件排序(或者说按照我自己下意识认为的读取顺序),我就把data_list[6]作为了NIR数据,把data_list[8]作为了R数据。问题就出在了这里。
3、问题检查及解决
因为是相同数据源得到的数据,所以理论上来说两张数据的像元数量不会出现不相等的情况,于是我打印了上述代码生成的数组:
if os.path.isdir(sub_folder_path):
print("!!!!!开始打印!!!!!")
data_list = []
meta = None
for file_name in os.listdir(sub_folder_path):
file_path = os.path.join(sub_folder_path, file_name)
if file_path.endswith('.tif'):
print(file_path)
data, meta = tiff_read(file_path)
data_list.append(data)
同一日期内的打印结果(左)和文件夹中文件排序(右)如下图所示:
可以看出,程序内的for循环读取顺序跟常规的逻辑是不太一致的,emmm具体原因其实我这个代码小白也不是太清楚哈哈哈不好意思,也欢迎大家评论补充呦。
所以NIR数据虽然还是data_list[6],而R数据其实是data_list[10]而不是data_list[8]。读取到的data_list[8]应该是result_20240627.tif,这个数据是无人机可见光相机拍摄的真彩色数据,像素比多光谱相机要高。这也是为什么我读取数据以后为什么像元数量不匹配的原因了。
最后,重新按照程序读取的顺序运算就没有问题啦~