我有一个矩阵,其中最后一列有一些浮点数。大约 70% 的数字是正数,而 30% 是负数。我想删除一些带有正数的行,以便结果矩阵在最后一列中具有大约相同数量的正数和负数。我想随机删除积极的行。
问问题
145 次
1 回答
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]])
我认为使用数组比使用矩阵更容易,如果您需要使用矩阵的解决方案,请告诉我。
于 2013-05-18T13:47:56.340 回答