将数组中每列的元素归一化为1或-1,取决于它们的符号。

5

我希望将数组‘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.        ]]
1个回答

7
你可以使用 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.        ]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接