ILNumerics的interp2是否仅支持方阵?splinen方法为何编译报错
问题解答
1. interp2是否仅支持正方形x/y输入
不是。interp2是针对二维规则网格设计的插值方法,支持任意长宽的矩形网格输入,核心要求是:
- X向量的长度必须与待插值数组(terrain)的第一维度长度完全一致
- Y向量的长度必须与待插值数组(terrain)的第二维度长度完全一致
你之前出现运行时错误,是因为初始定义的terrain切片为SpecialData.terrain["20:40;20:45"],第一维度长度为21(40-20+1),第二维度长度为26(45-20+1),当时传入的X2向量长度和terrain第二维度长度不匹配,才触发了参数长度错误。后续你把terrain的两个维度范围都改成20:40后,X1、X2的长度和terrain两个维度长度分别匹配,自然可以正常运行。只要保证维度长度对应,长宽不等的矩形网格完全可以正常使用interp2。
2. splinen方法无法编译的原因
ILNumerics的公共接口参数大多使用InArray<T>、InOutArray<T>等特殊类型做内存管理优化,你编译报错的核心原因是ILMath.cell方法接收的参数类型为InArray<T>,而你直接传入的Array<float>类型无法自动完成隐式转换。
要解决该编译错误,你只需要在传入数组时显式调用.A属性获取对应的InArray<T>实例即可,修改后的代码参考:
Array<float> smooth = Interpolation.splinen(terrain, ILMath.cell(X1.A, X2.A), ILMath.cell(Xn1.A, Xn2.A));
运行效果

内容的提问来源于stack exchange,提问作者user17352413
相关产品推荐
相关产品推荐

