Срез индекса Numpy без потери информации о размерах

Я использую numpy и хочу проиндексировать строку без потери информации об измерениях.

import numpy as np
X = np.zeros((100,10))
X.shape        # >> (100, 10)
xslice = X[10,:]
xslice.shape   # >> (10,)  

В этом примере xslice теперь равен 1 измерению, но я хочу, чтобы оно было (1, 10). В R я бы использовал X [10,:, drop = F]. Есть ли что-то подобное в NumPy. Я не смог найти его в документации и не увидел похожего вопроса.

Спасибо!

80
задан Joe Kington 11 January 2016 в 14:05
поделиться

2 ответа

Вероятно, проще всего сделать x[None, 10, :] или эквивалентно (но более читаемо) x[np.newaxis, 10, :].

Что касается того, почему это не по умолчанию, то лично я нахожу, что постоянное наличие массивов с единичными размерами быстро надоедает. Полагаю, разработчики numpy считают так же.

Кроме того, numpy очень хорошо обрабатывает широковещательные массивы, поэтому обычно нет причин сохранять размерность массива, из которого получен фрагмент. Если бы вы это сделали, то такие вещи, как:

a = np.zeros((100,100,10))
b = np.zeros(100,10)
a[0,:,:] = b

либо не работали бы, либо их было бы гораздо сложнее реализовать.

(или, по крайней мере, это мое предположение о том, что разработчики numpy не сохраняют информацию о размерности при нарезке)

.
47
ответ дан 24 November 2019 в 09:54
поделиться

Я нашел несколько разумных решений.

1) используйте numpy.take (X, [10], 0)

2) используйте эту странную индексацию X [10:11 :,:]

В идеале это должно быть по умолчанию. Я так и не понял, зачем вообще сбрасываются габариты. Но это обсуждение numpy ...

26
ответ дан 24 November 2019 в 09:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: