как разбить массив по значению - PullRequest
0 голосов
/ 14 февраля 2019

Пока мой код:

import numpy as np
data=np.genfromtxt('filename')
print(data)

, который печатает:

[[ 0.723  1.   ]
 [ 0.433  2.   ]
 [ 0.258  1.   ]
 [ 1.52   2.   ]
 [ 0.083  2.   ]
 [ 2.025  1.   ]
 [ 3.928  1.   ]]

Как разделить данные на две группы, основываясь на том, имеет ли строка 1 или 2

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Простое решение состоит в том, чтобы использовать np.where, который возвращает результаты условного оператора в форме кортежа массивов, который можно напрямую использовать с расширенной нотацией numpy для срезания этих данных в новую переменную.

import numpy as np

data = np.array(
[[ 0.723,  1.   ],
 [ 0.433,  2.   ],
 [ 0.258,  1.   ],
 [ 1.52,   2.   ],
 [ 0.083,  2.   ],
 [ 2.025,  1.   ],
 [ 3.928,  1.   ]])

data1 = data[np.where(data[:,1] == 1)]
data2 = data[np.where(data[:,1] == 2)]

print(data1)
print(data2)
0 голосов
/ 14 февраля 2019

Ваш вопрос был довольно коротким, поэтому я не совсем понял формат данных, но я попытался воспроизвести его с помощью:

foo = [[ 0.723,  1   ], [ 0.433,  2   ], [ 0.258,  1   ], [ 1.52,   2   ],
       [ 0.083,  2   ], [ 2.025,  1   ], [ 3.928,  1   ]]

На случай, если вы захотите отфильтровать этот список foo, чтобы он содержал только совпадающие числаДля определенного числа вы можете использовать следующее понимание списка:

foo_is_1 = [e for e in foo if e[1] == 1]
foo_is_2 = [e for e in foo if e[1] == 2]
print(foo_is_1)
print(foo_is_2)

В случае, если вы ничего не знаете о втором аргументе и просто хотите разделить ваш список на список списков с уникальными вторыми аргументами, которые вы можете использовать:

list_of_lists = [[e for e in foo if e[1] == a] for a in list(set([a[1] for a in foo]))]
for entry in list_of_lists:
    print(entry)

Это в основном два списка, по одному для каждого уникального второго аргумента a, и по одному для каждой записи e в foo.

0 голосов
/ 14 февраля 2019

Примерно так:

import numpy as np

data = np.asarray([[0.723, 1.],
                   [0.433, 2.],
                   [0.258, 1.],
                   [1.520, 2.],
                   [0.083, 2.],
                   [2.025, 1.],
                   [3.928, 1.]])
split_data = [data[data[:,1] == 1.], data[data[:,1] == 2.]]
print(f'data:\n{data}')
print(f'split_data:\n{split_data}')

Объяснение:

data[:,1] ссылается на значение во 2-м столбце как таковое.

Выход:

data:
[[0.723 1.   ]
 [0.433 2.   ]
 [0.258 1.   ]
 [1.52  2.   ]
 [0.083 2.   ]
 [2.025 1.   ]
 [3.928 1.   ]]
split_data:
[array([[0.723, 1.   ],
        [0.258, 1.   ],
        [2.025, 1.   ],
        [3.928, 1.   ]]), 
 array([[0.433, 2.   ],
        [1.52 , 2.   ],
        [0.083, 2.   ]])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...