Python 如何重塑astropy.coordinate.SkyCoord对象内的阵列形状?
我想使用一个包含坐标数组的SkyCoord对象作为输入参数来绘制二维等高线图 为此,我想在参数上创建网格网格 代码是这样的Python 如何重塑astropy.coordinate.SkyCoord对象内的阵列形状?,python,astropy,Python,Astropy,我想使用一个包含坐标数组的SkyCoord对象作为输入参数来绘制二维等高线图 为此,我想在参数上创建网格网格 代码是这样的 l = np.linspace(0, 360, 180) b = np.linspace(-90, 90, 90) # Two axes I wanted to make contour on. y=y.reshape(y.size,1,1) #(originally) an 1D array the same size as `coords`. l=l.reshape(1
l = np.linspace(0, 360, 180)
b = np.linspace(-90, 90, 90) # Two axes I wanted to make contour on.
y=y.reshape(y.size,1,1) #(originally) an 1D array the same size as `coords`.
l=l.reshape(1,l.size,1)
b=b.reshape(1,1,b.size)
coords = coords.reshape(y.shape) # No, this does not work.
coords.shape = y.shape # You can't write attributes like this. How frustrating.
z = Something_Fun((l,b),y,coords)
问题来了。
我尝试在坐标上使用np.meshgird,但它返回一个SkyCoord的np.array,而不是一个包含坐标数组的SkyCoord对象,这不是我想要的。对于函数,Something_Fun调用SkyCoord的成员函数,这显然不适用于np.array
不幸的是,SkyCoord没有提供内置的重塑方法,即使它有一个形状方法!如果保持coords的形状,代码将无法工作,因为操作无法使用不同维度的数组进行广播
有什么优雅的方法可以做到这一点吗?我不希望重写生成coords或函数的代码,因为它会搞乱许多其他事情
将SkyCoord数据导出为字符串并再次导入可能会奏效,但太脏且会失去精度。作为最后手段,我可能会试试。好的,我自己想出了一个解决办法。它仍然涉及来回进出口,但不会失去准确性。而且它很有效
coords=SkyCoord(coords.ra.reshape(y.shape),coords.dec.reshape(y.shape))
希望他们将来能提供一种内置的整形方法,这样可以节省我一些时间~coords=np.restrageCoords,y.shape。目前正在为坐标系统提供对整形和其他形状更改方法的支持:。