как извлечь нулевой срез из одномерного массива в numpy

Есть ли способ нарезать нулевой подмассив из одномерного массива?

Например, если у меня есть N-мерное ndarray arr, arr[0] возвращает (N-1)-мерное ndarray.

Однако, если у меня есть одномерный ndarray x, x[0] возвращает не 0-мерный ndarray, а скорее numpy.int64 (если x содержит int64s).

Минимальный пример:

def increment(zero_d_array):
    zero_d_array[...] = zero_d_array + 1

counter = numpy.array(0)  # a zero-dimensional array containing scalar 0
increment(counter)        # success; counter is now 1

counters = numpy.zeros(3, dtype=int)  # [0, 0, 0]
increment(counter[1])    # fails; counter[1] is a numpy.int64, not a 0-D array

Я понимаю, что вышеприведенное будет работать с increment(counter[1:2]), но только потому, что increment() работает как с 0-D, так и с 1-D входами. Не все функции будут такими гибкими.


person SuperElectric    schedule 10.10.2014    source источник
comment
Я не уверен, что есть способ. Нулевые массивы — это немного странно в Numpy. Есть ли причина, по которой вам действительно нужно это сделать?   -  person BrenBarn    schedule 10.10.2014
comment
Я часто нахожу, что массивы с нулевым d являются полезным способом иметь упакованные примитивы, такие как int, которые я могу передать функции, чтобы изменить ее на месте (чего вы не можете сделать с простыми int). Как я упоминал в вопросе, очевидно, что есть обходные пути, такие как использование вместо этого одномерных срезов размера 1, но они более подробные.   -  person SuperElectric    schedule 10.10.2014
comment
Да, но вопрос в том, нужно ли вам иметь возможность получить их путем нарезки? Если вы просто хотите сохранить нулевой счетчик, вы можете сделать это, как показано, создав его явно. Итак, я имею в виду, что вы на самом деле делаете, что заставляет вас хотеть в общем случае нарезать и увеличивать массивы любого измерения, вместо того, чтобы просто создавать свой счетчик и увеличивать его?   -  person BrenBarn    schedule 10.10.2014


Ответы (1)


Используйте многоточие:

increment(counter[1, ...])
person ecatmur    schedule 10.10.2014