2014-02-13 3 views
6

У меня есть матрица, A с 3 столбцов, который выглядит примерно так, но гораздо больше:Python: отдельные матрицы по столбцам значения

[[10 15 1.0] 
[21 13 1.0] 
[9 14 0.0] 
[14 24 1.0] 
[21 31 0.0] 
...] 

Я хочу, чтобы создать две отдельные матрицы: один, который содержит все данные с третий столбец = 0,0, а другой - со всеми данными с третьим столбцом = 1.0. Таким образом, по существу разделение данных на значения 0.0 или 1.0 в третьем столбце.

+2

Вы используете NumPy? –

+0

Да, я могу использовать numpy – userk

ответ

1

Вот как мы разделили бы матрицу с использованием списков, нет необходимости импортировать дополнительные библиотеки. Во-первых, одна матрица, которая содержит все данные с третьего столбца 0.0:

[x for x in matrix if x[2] == 0.0] 

И еще одна матрица со всеми данными, которая относится к тому, когда третий столбец 1.0:

[x for x in matrix if x[2] == 1.0] 

Например :

matrix = [[10, 15, 1.0], 
      [21, 13, 1.0], 
      [ 9, 14, 0.0], 
      [14, 24, 1.0], 
      [21, 31, 0.0]] 

[x for x in matrix if x[2] == 0.0] 
=> [[ 9, 14, 0.0], 
    [21, 31, 0.0]] 

[x for x in matrix if x[2] == 1.0] 
=> [[10, 15, 1.0], 
    [21, 13, 1.0], 
    [14, 24, 1.0]] 
6

Если вы используете Numpy, сначала найти строки, где третий столбец имеет нужное значение, а затем извлечь тыс e строк, используя indexing.

Demo

>>> import numpy 
>>> A = numpy.array([[1, 0, 1], 
        [2, 0, 1], 
        [3, 0, 0], 
        [4, 0, 0], 
        [5, 0, 0]]) 
>>> A1 = A[A[:, 2] == 1, :] # extract all rows with the third column 1 
>>> A0 = A[A[:, 2] == 0, :] # extract all rows with the third column 0 
>>> A0 
array([[3, 0, 0], 
     [4, 0, 0], 
     [5, 0, 0]]) 
>>> A1 
array([[1, 0, 1], 
     [2, 0, 1]]) 
2
>>> a 
array([[ 10., 15., 1.], 
     [ 21., 13., 1.], 
     [ 9., 14., 0.], 
     [ 14., 24., 1.], 
     [ 21., 31., 0.]]) 
>>> a[np.where(a[:,-1])] 
array([[ 10., 15., 1.], 
     [ 21., 13., 1.], 
     [ 14., 24., 1.]]) 
>>> a[np.where(~a[:,-1].astype(bool))] 
array([[ 9., 14., 0.], 
     [ 21., 31., 0.]]) 
Смежные вопросы