在numpy中平衡正面和负面

时间:2013-05-18 13:24:14

标签: python numpy

我有一个矩阵,其中最后一列有一些浮点数。大约70%的数字是正数,而30%是负数。我想删除一些带正数的行,这样结果矩阵在最后一列中的正数和负数大致相同。我想随机删除积极行。

1 个答案:

答案 0 :(得分:1)

这个怎么样:

import numpy as np

x = np.arange(30).reshape(10, 3)

x[[0,1,2,],[2,2,2]] = x[[0,1,2],[2,2,2]] * -1

a = np.where(x[:,2] > 0)[0]

n_pos = np.sum(x[:,2] > 0)
n_neg = np.sum(x[:,2] < 0)

n_to_remove = n_pos - n_neg
np.random.shuffle(a)

new_x = np.delete(x, a[:n_to_remove], axis = 0)

结果:

>>> x

array([[ 0,  1, -2],
       [ 3,  4, -5],
       [ 6,  7, -8],
       [ 9, 10, 11],
       [12, 13, 14],
       [15, 16, 17],
       [18, 19, 20],
       [21, 22, 23],
       [24, 25, 26],
       [27, 28, 29]])
>>> new_x
array([[ 0,  1, -2],
       [ 3,  4, -5],
       [ 6,  7, -8],
       [15, 16, 17],
       [18, 19, 20],
       [27, 28, 29]])

我认为这对数组比使用矩阵更容易,如果你需要一个带矩阵的解决方案,请告诉我。