如何在Python quantities模块中拼接数组且保留单位?
解决Quantities数组拼接丢失单位的问题
嘿,我刚好碰到过类似的坑!用numpy.concatenate()处理quantities数组时确实会丢单位,因为numpy的拼接函数默认不会保留quantities子类的元数据(比如单位信息)。不过有几个简单的办法可以完美解决这个问题:
方法1:手动拼接数值后重新赋予单位
既然你要拼接的两个数组单位一致(都是V),我们可以先提取它们的纯数值部分(通过.magnitude属性)完成拼接,之后再乘以原单位就能恢复完整的quantity对象:
import numpy as np import quantities as pq a = [1,2,3]*pq.V b = [4,5,6]*pq.V # 提取数值拼接,再恢复单位 concatenated_arr = np.concatenate([a.magnitude, b.magnitude]) * a.units print(concatenated_arr)
输出结果:
array([1., 2., 3., 4., 5., 6.]) * V
方法2:用quantities的array_wrap方法包装结果
quantities本身提供了array_wrap方法,能把普通numpy数组重新包装成带单位的quantity对象,直接复用原数组的单位即可:
import numpy as np import quantities as pq a = [1,2,3]*pq.V b = [4,5,6]*pq.V # 先拼接得到无单位数组,再用array_wrap恢复单位 raw_result = np.concatenate([a, b]) concatenated_arr = a.units.array_wrap(raw_result) print(concatenated_arr)
这个方法同样能得到带正确单位的结果,逻辑上更贴合quantities的设计思路。
小提醒
如果要拼接的两个数组单位不同,那拼接本身就没有物理意义,这种情况下quantities也不应该允许这样的操作,所以确保你要拼接的数组单位一致哦~
内容的提问来源于stack exchange,提问作者grg rsr
相关产品推荐
相关产品推荐

