**或pow()的不支持的操作数类型:'generator'和'int'

时间:2015-08-07 21:11:33

标签: numpy matplotlib

我想要的: 我正在尝试读取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点)。

1 个答案:

答案 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])