foo[:, None]
расширяет 1 мерную матрицу foo
во втором измерении. Фактически, numpy
использует псевдоним np.newaxis
для этого.
считают foo
foo = np.array([1, 2])
print(foo)
[1 2]
одномерный массив имеет ограничения. Например, что такое транспонирование?
print(foo.T)
[1 2]
То же самое, как и сам
print(foo.T == foo)
[ True True]
Это ограничение массива имеет много значений, и он становится полезным рассмотреть foo
в контексте более высокой размерности. NumPy использует np.newaxis
print(foo[np.newaxis, :])
[[1 2]]
Но это np.newaxis
просто синтаксический сахар для None
np.newaxis is None
True
Так, часто мы используем None
вместо потому что меньше символов и означает то же самое
print(foo[None, :])
[[1 2]]
Хорошо, посмотрим, что еще мы могли бы сделать. Заметьте, что я использовал пример с None
в первой позиции, в то время как OP использует вторую позицию. Эта позиция определяет, какое измерение расширено. И мы могли бы это сделать дальше. Пусть эти примеры помогают объяснить
print(foo[None, :]) # same as foo.reshape(1, 2)
[[1 2]]
print(foo[:, None]) # same as foo.reshape(2, 1)
[[1]
[2]]
print(foo[None, None, :]) # same as foo.reshape(1, 1, 2)
[[[1 2]]]
print(foo[None, :, None]) # same as foo.reshape(1, 2, 1)
[[[1]
[2]]]
print(foo[:, None, None]) # same as foo.reshape(2, 1, 1)
[[[1]]
[[2]]]
Имейте в виду, какой размер есть что, когда NumPy печатает массив
print(np.arange(27).reshape(3, 3, 3))
dim2
────────⇀
dim0 → [[[ 0 1 2] │ dim1
[ 3 4 5] │
[ 6 7 8]] ↓
────────⇀
→ [[ 9 10 11] │
[12 13 14] │
[15 16 17]] ↓
────────⇀
→ [[18 19 20] │
[21 22 23] │
[24 25 26]]] ↓
Он используется в качестве псевдонима для [ 'np.newaxis'] (https: //docs.scipy.org/doc/numpy/reference/arrays.indexing.html # numpy.newaxis), который используется для добавления размеров синглтона (dims with length = 1). В случае с образцом он был добавлен для преобразования входного массива 1D в '2D', при этом второй dim был одноточечным. – Divakar