2015-08-22 3 views
0

Я использую структуру данных, которая представляет собой многомерный массив numpy. Для некоторых случаев использования этот массив имеет n, а для других размеров n+1. Я хочу сохранить красивую структуру, которую она имеет, а не загромождать код со слишком многими условиями, поэтому мне было интересно, есть ли способ всегда использовать индексы n+1 и игнорировать последний индекс при операции индексирования.Нейтральный индекс массива numpy

Например следующее должно работать эквивалент:

# case 1 (n+1) - no neutral index required 
a = np.asarray([[1, 2, 3], [4, 5, 6]]) 
last_index = 1 
# this works 
value = a[0, last_index] 

# case 2 (n) - last index is neutral 
a = np.asarray([1, 2, 3]) 
last_index = <neutral index> 
# last_index will be ignored in this case 
value = a[0, last_index] 
+0

Что вы хотите 'значение = а [0, last_index]' во втором случае, чтобы вернуться? –

+0

Точно так же, как если бы 'last_index' просто игнорировался. В этом случае это будет '1'. – orange

+0

Нет, я имею в виду, что должно произойти при доступе к 'a [0, last_index]'? –

ответ

0

Как насчет Ellipsis? Обычно я вижу, что в скобках, но этот тест показывает, что он может быть назначен переменной

In [68]: i=Ellipsis 
# i=... # works in Python3 

In [69]: np.array([[1,2,3],[4,5,5]])[0,i] 
Out[69]: array([1, 2, 3]) 

In [70]: np.array([1,2,3])[0,i] 
Out[70]: array(1) 

In [71]: np.array([1,2,3])[0,...] 
Out[71]: array(1) 
+0

Это выглядит многообещающе. Это также работает на Python 2? – orange

+0

Awesome - работает как шарм в Python 2.7.9. Благодаря! – orange