将存储'+'/'-'字符的numpy数组转为±1整数,是否有numpy/astropy内置函数?
可用实现方案
NumPy原生内置方法
你可以直接用NumPy内置的np.where实现,相比你当前的写法可读性更高,性能完全一致,都是全向量化操作,适合处理大尺寸的科学表格数据:
import numpy as np sign_char_array = np.array(['+', '-', '+', '+']) converted_sign_array = np.where(sign_char_array == '+', 1, -1) # 输出:array([ 1, -1, 1, 1])
Astropy天文场景专属方案
作为天文领域常用工具,Astropy有专门适配六十进制坐标处理的接口,不需要你手动转换符号再做乘法,可以直接把单独的符号列和后续的度/分/秒数值列组合转换为角度对象:
from astropy.coordinates import Angle import astropy.units as u import numpy as np # 示例数据:符号列、度列、分列、秒列 sign_col = np.array(['+', '-', '+', '+']) deg_col = np.array([23, 10, 45, 0]) min_col = np.array([30, 15, 2, 59]) sec_col = np.array([15.2, 3.6, 44.8, 10.1]) # 直接拼接为标准角度字符串后转Angle对象,自动处理符号 dec_angle = Angle(sign_col + deg_col.astype(str) + 'd' + min_col.astype(str) + 'm' + sec_col.astype(str) + 's') # 可直接导出为带符号的十进制度、弧度等数值格式供后续计算 dec_degree = dec_angle.degree
如果你确实需要单独的±1符号数组,结合np.where处理Astropy Table的列数据也是天文领域常用的实现方式,兼容性和性能都能满足科研数据处理需求。
内容的提问来源于stack exchange,提问作者tomr_stargazer
相关产品推荐
相关产品推荐

