根据符号将数组中列的元素归一化为 1 或 -1
Normalize the elements of columns in an array to 1 or -1 depending on their sign
我想将包含正数和负数的数组“x”中列的元素归一化为 -1 或 1。
x 的负元素应归一化为每列的 x.min,其中 x.min 变为 - 1,x 的正元素应归一化为每列的 x.max,其中 x.max 变为 1。零值应保持为零。
我可以通过以下方式到达那里的一部分:
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. ]])
我想将包含正数和负数的数组“x”中列的元素归一化为 -1 或 1。
x 的负元素应归一化为每列的 x.min,其中 x.min 变为 - 1,x 的正元素应归一化为每列的 x.max,其中 x.max 变为 1。零值应保持为零。
我可以通过以下方式到达那里的一部分:
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. ]])