在Python中从数组中提取正值和负值

时间:2017-08-22 13:00:38

标签: python arrays python-3.x numpy

我有一个名为A的数组:

A = np.array([[-1, 2, -3],
              [4, -5, 6],
              [-7, 8, -9]])

现在我想提取正面和负面部分,并将它们保存在两个新数组中,如:

B = np.array([[0, 2, 0],
              [4, 0, 6],
              [0, 8, 0]])

表示正面部分和

C = np.array([[-1, 0, -3],
              [0, -5, 0],
              [-7, 0, -9]])

负面部分。

您能否指导我如何从Python 3.6中的数组B获取数组CA

1 个答案:

答案 0 :(得分:1)

解决方案

使用两个np.where来替换零以下零以下的值:

>>> import numpy as np
>>> A = np.array([[-1, 2, -3], [4, -5, 6], [-7, 8, -9]])
>>> B = np.where(A > 0, A, 0)
>>> C = np.where(A < 0, A, 0)
>>> B
array([[0, 2, 0],
       [4, 0, 6],
       [0, 8, 0]])
>>> C
array([[-1,  0, -3],
       [ 0, -5,  0],
       [-7,  0, -9]])

解释

np.where的三个参数形式广播参数,第一个和第二个已经具有相同的形状(3, 3),但0将被广播到:

>>> Ag0_bc, B_bc, zero_bc = np.broadcast_arrays(A > 0, A, 0)
>>> Ag0_bc
array([[False,  True, False],
       [ True, False,  True],
       [False,  True, False]], dtype=bool)
>>> zero_bc
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])

然后np.where将创建一个新数组,并使用第二个参数(A)中的相应元素填充新数组中的每个元素,如果第一个参数中的元素(A > 0 )是True并从第三个参数0获取元素,以防False