Я использую 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. Я не смог найти его в документации и не увидел похожего вопроса.
Спасибо!
Вероятно, проще всего сделать x[None, 10, :]
или эквивалентно (но более читаемо) x[np.newaxis, 10, :]
.
Что касается того, почему это не по умолчанию, то лично я нахожу, что постоянное наличие массивов с единичными размерами быстро надоедает. Полагаю, разработчики numpy считают так же.
Кроме того, numpy очень хорошо обрабатывает широковещательные массивы, поэтому обычно нет причин сохранять размерность массива, из которого получен фрагмент. Если бы вы это сделали, то такие вещи, как:
a = np.zeros((100,100,10))
b = np.zeros(100,10)
a[0,:,:] = b
либо не работали бы, либо их было бы гораздо сложнее реализовать.
(или, по крайней мере, это мое предположение о том, что разработчики numpy не сохраняют информацию о размерности при нарезке)
.Я нашел несколько разумных решений.
1) используйте numpy.take (X, [10], 0)
2) используйте эту странную индексацию X [10:11 :,:]
В идеале это должно быть по умолчанию. Я так и не понял, зачем вообще сбрасываются габариты. Но это обсуждение numpy ...