2016-03-01 2 views
1

На базовом уровне я могу индекс один Numpy массива по другому, так что я могу возвращать индекс массива, таким образом, что:Подмножество один NumPy массив другого

a = [1,2,3,4,5,6] 

b = [0.4, 0.5, 0.6, 0.7, 0.8, 0.9] 

и индекс 0,6 можно найти :

c = a[b==0.6] 

Однако теперь у меня есть 3D-массивы, и я не могу оторвать то, что мне нужно.

У меня есть 3 массива:

A = [[21,22,23....48,49,50]] # An index over the range 20-50 with shape (1,30) 

B = [[0.1,0.6,0.5,0.4,0.8...0.7,0.2,0.4], 
    .................................. 
    [0.5,0.2,0.7,0.1,0.5...0.8,0.9,0.3]] # This is my data with shape (40000, 30) 

C = [[0.8],........[0.9]] # Maximum values from each array in B with shape (40000,1) 

Я хотел бы знать позицию (от A) путем индексации значения максимального (C) в каждом из массивов в моих данных (B)

Я пробовал:

D = A[B==C] 

, но я получаю сообщение об ошибке:

IndexError: index 1 is out of bounds for axis 0 with size 1 

Самостоятельно я могу получить:

B==C# prints as arrays of True or False 

, но я не могу получить индекс позиции от А.

Любая помощь приветствуется!

+0

'(Б == С) .shape' является' (40000, 30) '. Как это соответствует форме A? – Eric

ответ

1

Это то, что вы ищете? Получение индекса, где максимальное значение находится в каждой строке, используя функцию argmax и использование индексов, чтобы получить соответствующее значение в А.

In [16]: x = np.random.random((20, 30)) 
In [16]: max_inds = x.argmax(axis=1) 

In [17]: max_inds.shape 
Out[17]: (20,) 

In [18]: A = np.arange(x.shape[1]) 

In [19]: A.shape 
Out[19]: (30,) 

In [20]: A[max_inds] 
Out[20]: 
array([20, 5, 27, 19, 27, 21, 18, 25, 10, 24, 16, 21, 6, 7, 27, 17, 24, 
     8, 27, 8]) 
+0

Да, это то, что мне нужно. Его возвращает мне массив из 40000 значений. Армакс сделал разницу. Вместо этого я использовал amax! –

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