在之前的帖子中,我看到更改
我的
我需要将AC列从
recarray
的 dtype
可以使用 astype
进行。但是,我无法在一个列中具有数组的 recarray
上执行此操作。我的
recarray
来自FITS文件记录:> f = fits.open('myfile.fits')
> tbdata = f[1].data
> tbdata
# FITS_rec([ (0.27591679999999996, array([570, 576, 566, ..., 571, 571, 569], dtype=int16)),
# (0.55175680000000005, array([575, 563, 565, ..., 572, 577, 582], dtype=int16)),
# ...,
# (2999.2083967999997, array([574, 570, 575, ..., 560, 551, 555], dtype=int16)),
# (2999.4842367999995, array([575, 583, 578, ..., 559, 565, 568], dtype=int16)],
# dtype=[('TIME', '>f8'), ('AC', '>i4', (2,))])
我需要将AC列从
int
转换为float
,因此我尝试了以下代码:
> tbdata = tbdata.astype([('TIME', '>f8'), ('AC', '>f4', (2,))])
虽然看起来 dtype
已经改变,但是...
> tbdata.dtype
# dtype([('TIME', '>f8'), ('AC', '>f4', (2,))])
查看AC中的数据,发现它们仍然是整数值。例如,对于一个sum
计算,达到了int16
变量的极限(所有AC列的值都是正数):
> tbdata['AC'][0:55].sum()
# _VLF(array([31112, 31128, 31164, ..., 31203, 31232, 31262], dtype=int16), dtype=object)
> tbdata['AC'][0:65].sum()
# _VLF(array([-28766, -28759, -28702, ..., -28659, -28638, -28583], dtype=int16), dtype=object)
有没有有效的方法可以更改数组数据类型?
array([570, 576, 566, ..., 571, 571, 569], dtype=int16)
。 - Warren Weckesser