2016-01-27 2 views
2

мне нужно объединить 4 столбцов массива в одну колонкуКак объединить 4 столбцов на основе определяемых пользователем критериев

array([[0, 0, 0, 1], 
     [1, 0, 0, 0], 
     ..., 
     [0, 1, 0, 0]]) 

Результат должен быть:

array([3, 0, ..., 1]) 

В частности, я хотите получить индексы столбцов (начиная с 0 и заканчивая на 3) для тех столбцов, которые имеют значение 1.

+0

нм, понять сейчас. – roganjosh

+0

@roganjosh: Посмотрите на первую строку '[0, 0, 0, 1]'. Столбец 3 (если подсчет начинается с 0) имеет значение 1. –

+0

Если у вас несколько 1 в одной строке? – JuniorCompressor

ответ

0

Если каждая строка имеет уникальный один, то следующий будет работать:

np.where(a == 1)[1] 

Например:

>>> a = np.array([[0, 0, 0, 1], [1, 0, 0, 0], [0, 1, 0, 0]]) 
>>> np.where(a == 1)[1] 
array([3, 0, 1]) 

Мы можем видеть это из следующих функций:

>>> np.where(a == 1) 
(array([0, 1, 2]), array([3, 0, 1])) 

array([0, 1, 2]) - строка inde xes, имеющих одно значение, и array([3, 0, 1] - это индексы столбцов. Это означает, что мы имеем одно значение в координатах (0, 3), (1, 0), (2, 1). Поскольку каждая строка будет иметь одно уникальное значение, то для каждой строки будет один индекс столбца.

1

На основе каждой строки, содержащей только одно значение «1» и только с нулями и единицами.

EDIT: По какой-то причине я потерял связь с numpy при попытке уточнить вопрос. Это не сработает, если вы используете numpy, но я оставлю его на случай, если вы ищете что-то с просто списками.

a = [[0, 0, 0, 1], 
    [1, 0, 0, 0], 
    [1, 0, 0, 0], 
    [0, 1, 0, 0]] 

# One way 
single_list = [] 
for x in a: 
    single_list.append(x.index(1)) 

# or   
using_list_comprehension = [x.index(1) for x in a] 
+0

AttributeError: объект 'numpy.ndarray' не имеет атрибута 'index' –

+0

Однако, 'type (test_fold_y)' дает numpy.ndarray –

+0

Я сделал редактирование непосредственно перед тем, как вы сделали этот комментарий, мой плохой :( – roganjosh

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