2013-05-18 3 views
0

У меня есть матрица, где в последнем столбце есть поплавки. Около 70% номеров являются положительными, а 30% отрицательными. Я хотел бы удалить некоторые строки с положительным числом, чтобы матрица результатов имела примерно одинаковое число положительных и отрицательных чисел в последнем столбце. Я хотел бы удалить случайные строки случайным образом.положительные и отрицательные значения баланса в numpy

ответ

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]]) 

Я думаю, что это легче сделать с массивами, чем матрицы, дайте мне знать, если вам нужно решение с матрицами.

Смежные вопросы