我想将数组’x’中包含正数和负数的列的元素规范化为-1或1.
x的负元素应归一化为每列的x.min,其中x.min变为-1,x的正元素应归一化为x.max变为1的每列的x.max.零值应保持为零.
我可以使用以下方式:
x = np.array([[ 1, 3, 1 ],
[-2, -5, -0.5],
[-3, -1, 1.5],
[ 2, 7, 2 ]])
x_norm = x / x.max(axis=0)
print(x_norm)
[[ 0.5 0.42857143 0.5 ]
[-1. -0.71428571 -0.25 ]
[-1.5 -0.14285714 0.75 ]
[ 1. 1. 1. ]]
但我真的希望结果如下:
print(x_norm)
[[ 0.5 0.42857143 0.5 ]
[-0.66 -1. -1. ]
[-1. -0.2 0.75 ]
[ 1. 1. 1. ]]
最佳答案:
您可以使用np.where检查条件,并根据条件应用两种不同的标准化:
np.where(x<0, -x / x.min(axis=0), x / x.max(axis=0))
Out[6]:
array([[ 0.5 , 0.42857143, 0.5 ],
[-0.66666667, -1. , -1. ],
[-1. , -0.2 , 0.75 ],
[ 1. , 1. , 1. ]])