如何对向量所有元素计算2次幂后保留其原有正负符号
向量元素二次幂运算保留原正负号实现方法
核心实现逻辑:普通二次幂运算会消去元素的负号,要保留原符号只需要在计算出幂值后,乘上对应元素的原始符号即可,等价于直接计算元素值 * 元素的绝对值——正数场景下该式等于x²,负数场景下该式等于 -x²,刚好符合带符号二次幂的要求。
给定向量手动计算结果
原始向量:v = [4,7,-2,9,3,-6,-4,1]
逐元素计算后得到的结果向量为:[16, 49, -4, 81, 9, -36, -16, 1]
逐元素计算过程:
- 4:4*abs(4)=16,符号为正,结果16
- 7:7*abs(7)=49,符号为正,结果49
- -2:-2*abs(-2)=-4,符号为负,结果-4
- 9:9*abs(9)=81,符号为正,结果81
- 3:3*abs(3)=9,符号为正,结果9
- -6:-6*abs(-6)=-36,符号为负,结果-36
- -4:-4*abs(-4)=-16,符号为负,结果-16
- 1:1*abs(1)=1,符号为正,结果1
常用代码实现
原生Python列表实现
v = [4,7,-2,9,3,-6,-4,1] # 简洁写法:利用x*abs(x)直接得到带符号二次幂结果 result = [x * abs(x) for x in v] print(result) # 输出: [16, 49, -4, 81, 9, -36, -16, 1]
NumPy向量化实现(适合大尺寸向量运算场景)
import numpy as np v = np.array([4,7,-2,9,3,-6,-4,1]) result = v * np.abs(v) print(result) # 输出: [ 16 49 -4 81 9 -36 -16 1]
注意:如果向量中存在0元素,上述写法依然成立,0*abs(0)=0,符合计算预期。
内容的提问来源于stack exchange,提问作者Hassan Abbas
相关产品推荐
相关产品推荐

