如何解决将浮点索引插值从MATLAB转换为Python 有关错误的说明
例如,我有一个索引数组
ax = [0,0.2,2] #start from index 0: python
和矩阵I
I=
10 20 30 40 50
10 20 30 40 50
10 20 30 40 50
10 20 30 40 50
10 20 30 40 50
在MATLAB中,通过运行以下代码
[gx,gy] = meshgrid([1,1.2,3],[1,3]);
I = [10:10:50];
I = vertcat(I,I,I)
SI = interp2(I,gx,gy,'bilinear');
结果SI
是
SI =
10 12 30
10 12 30
10 12 30
我尝试使用NumPy在Python中进行相同的插值。我首先按行插值,然后按列插值
import numpy as np
ax = np.array([0.0,2.0])
ay = np.array([0.0,2.0])
I = np.array([[10,20,30,40,50]])
I = np.concatenate((I,I),axis=0)
r_idx = np.arange(1,I.shape[0]+1)
c_idx = np.arange(1,I.shape[1]+1)
I_row = np.transpose(np.array([np.interp(ax,r_idx,I[:,x]) for x in range(0,I.shape[0])]))
I_col = np.array([np.interp(ay,c_idx,I_row[y,:]) for y in range(0,I_row.shape[0])])
SI = I_col
但是,生成的SI
是
SI =
10 10 20
10 10 20
10 10 20
为什么使用Python的结果与使用MATLAB的结果不同?
解决方法
似乎您通过从MATLAB传递到Python来纠正自己,如第一个代码摘录所示。
ax = [0,0.2,2] #start from index 0: python
在numpy逻辑中,此序列不代表索引,而是坐标 该函数进行插值。 由于您已经在这里增加坐标以与matlab兼容,因此:
r_idx = np.arange(1,I.shape[0]+1)
c_idx = np.arange(1,I.shape[1]+1)
您可以重复使用与Matlab中相同的插值坐标:
ax = [1,1.2,3]
完整代码:
import numpy as np
ax = np.array([1.0,3.0])
ay = np.array([1.0,3.0])
I = np.array([[10,20,30,40,50]])
I = np.concatenate((I,I,I),axis=0)
r_idx = np.arange(1,I.shape[1]+1)
I_row = np.transpose(np.array([np.interp(ax,r_idx,I[:,x]) for x in range(0,I.shape[
0])]))
I_col = np.array([np.interp(ay,c_idx,I_row[y,:]) for y in range(0,I_row.shape[0])]
)
SI = I_col
和结果:
array([[10.,12.,30.],[10.,30.]])
有关错误的说明
由于ax
表示坐标,因此前两个值0.0
和0.2
在r_idx
的第一个坐标之前。
根据{{3}},插值将默认为I [:,x] [0]。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。