我想要的: 我正在尝试读取6,000个坐标(ra和dec)的列表,并且对于每个坐标,它们周围都是78点。我正在应用一个角度(ang),然后试图找到新的RA和DEC。 z_sq =(x 2 + y 2)似乎存在问题,因为我得到**或pow()的错误不支持的操作数类型:'generator'和'int'。
import matplotlib.pyplot as plt
import numpy as np
import pylab as py
coords=np.genfromtxt('HETDEX_reg.txt',dtype=None,usecols=(0,1,2),names= ('ra','dec','ang'))
ra=coords['ra']
dec=coords['dec']
ang=coords['ang']
coords=np.genfromtxt('Ifus_78_base.txt', dtype=None, usecols=(0,1), names=('xx', 'yy'))
xx=coords['xx']
yy=coords['yy']
for i in range(len(ang)):
ang_new=360-ang[i]
x= (xx[j] for j in range(len(xx)))
y= (yy[j] for j in range(len(yy)))
z_sq=(x**2 + y**2)
z=np.sqrt(z_sq)
x_new=(np.deg2rad(x))
y_new=(np.deg2rad(y))
Theta=py.arctan(x_new/y_new)
Tau=90-ang[i]-Theta
Tau_rad=np.deg2rad(Tau)
Delta_Dec=z*py.sin(Tau_rad)
DEC=dec[i]+Delta_Dec
Delta_ra=z*py.cos(Tau_rad)
RA=ra[i]+Delta_ra/(py.cos(DEC/206205))
print DEC
print RA
对于每个原始ra和dec,我应该得到一组新的RA和DEC 78次(bc有78 x和y点)。
答案 0 :(得分:0)
问题在于:
x= (xx[j] for j in range(len(xx)))
y= (yy[j] for j in range(len(yy)))
z_sq=(x**2 + y**2)
试
In [29]: x=(j for j in range(10))
In [30]: z=x**2+x
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-30-c8ea7ceba90f> in <module>()
----> 1 z=x**2+x
TypeError: unsupported operand type(s) for ** or pow(): 'generator' and 'int'
In [31]: x
Out[31]: <generator object <genexpr> at 0xb2b411e4>
查看错误 - x
是一个由()
表达式
x=[j for j in range(10)]
是列表(列表理解),但仍然不起作用。 x
需要是一个数组,具有**
方法。
In [34]: x=np.array([j for j in range(10)])
In [35]: x**2
Out[35]: array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81])