【发布时间】:2016-06-27 14:37:44
【问题描述】:
下面的代码只是为了理解上下文。我的问题不需要对此有太多了解。它需要将一行 MATLAB 代码简单地翻译成 Python。
us = np.linspace(-(1023)/2,(1023)/2,1024)
vs = np.linspace(-(1023)/2,(1023)/2,1024)
uu,vv = np.meshgrid(-us,vs)
pu = ((((rx*SDD)/(ry+SOD))+us[0])/(-du))+1
xs = np.linspace(-(360-1)/2,(nx-1)/2,360)
ys = np.linspace(-(360-1)/2,(ny-1)/2,360)
zs = np.linspace(-(360-1)/2,(ny-1)/2,360)
xx,yy = np.meshgrid(xs,ys)
angle_rad = np.linspace(0,359,360)
angle_rad = angle_rad*np.pi/180
for i in range(0,360) :
vol = np.zeros((360,360,360))
rx = xx*np.cos(angle_rad[i]-np.pi/2) + yy*np.sin(angle_rad[i]-np.pi/2)
ry = -xx*np.sin(angle_rad[i]-np.pi/2) + yy*np.cos(angle_rad[i]-np.pi/2)
pu = ((((rx*370)/(ry+9))+us[0])/(-51.2/1024))+1
for iz in range(0,360) :
pv = ((((zs[iz]*370)/(ry+9))-vs[0])/(51.2/1024)) +1
所以在这一步之后,代码应该进行插值,在 MATLAB 中是这样的:
vol(:,:,iz) = interp2(uu,vv ,proj',pu,pv,'linear'); This is in MATLAB
我的 proj, uu 和 vv 是 (1024,1024) 而 pu, pv 是 (360,360)。我需要将上面的行转换为 Python。我尝试使用 scipy.interpolate 但在尝试这些时会出现以下错误:
vol[:,:,iz] = Ratio*(interp2d(uu,vv,proj,pu,pv,'cubic'))
TypeError: unhashable type: 'numpy.ndarray'
vol[:,:,iz] = Ratio*(interp2d(uu,vv,proj,'cubic'))
OverflowError:要插入的数据点太多
vol[:,:,iz] = Ratio*(interp2d(proj,pu,pv,'cubic'))
ValueError: 对于非矩形网格,x 和 y 的长度必须相等
vol[:,:,iz] = Ratio*(interp2d(pu,pv,proj,'cubic'))
ValueError:非矩形网格的输入 z 长度无效
我已阅读所有 scipy.interpolate 文档,但似乎没有任何帮助。有人能弄清楚是什么问题吗?
【问题讨论】:
-
阅读docs.scipy.org/doc/scipy/reference/generated/… 并查看页面底部的示例。不要只是阅读它,而是打开一个 Python 控制台并重复每个步骤并尝试打印数组。
标签: python python-2.7 python-3.x scipy