在之前的帖子dtype
中,我已经看到recarray
可以使用astype
. 但是,我无法使用recarray
其中一列中有一个数组的 a 来做到这一点。
我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)
有没有办法有效地改变数组数据类型?