нарезка, которая всегда будет возвращать массив - PullRequest
0 голосов
/ 05 мая 2011

Учитывая массив numpy и индекс типа __getitem__, существует ли идиоматический способ получить соответствующий фрагмент массива, , который всегда будет возвращать массив, а не скаляр ?

Примеры допустимых индексов: int, slice, многоточие или кортеж из вышеперечисленных.

Скажем, у меня есть такой массив:

a = np.array([[1,2],[3,4]])

Я ищу операцию, которая была бы эквивалентна a[whatever] во всех случаях, кроме случаев, когда a[whatever] возвращает скаляр (например, a[1,1]). В этих случаях я хотел бы, чтобы эта альтернативная операция вместо этого возвращала одноэлементный массив.

Ответы [ 3 ]

5 голосов
/ 05 мая 2011

Если вы просто хотите вернуть одноэлементный массив в случаях, когда в противном случае будет возвращен скаляр, почему бы просто не использовать numpy.atleast_1d для результата среза?1005 *

2 голосов
/ 05 мая 2011

Вот немного более сложная версия, которая всегда возвращает представление в исходный массив (конечно, при условии, что вы не выполняете никакой расширенной индексации; это должно быть гарантировано указанием допустимых индексов):

def get(a, item):
    if not isinstance(item, tuple):
        item = (item,)
    if len(item) == a.ndim and all(isinstance(x, int) for x in item):
        return a[item + (None,)]
    else:
        return a[item]
0 голосов
/ 05 мая 2011

Кроме np.array(a[whatever])? Не думайте, что есть более простой / более идиоматический способ, чем этот.

...