Python: есть ли разница между x [i ,:] и x [i] [:] [duplicate]

1

Я попробовал распечатать оба из них:

print(X_train[0])
print(X_train[0,:])

#Output
[ 59.  62.  63. ... 123.  92.  72.]
[ 59.  62.  63. ... 123.  92.  72.]

Я думал, что они такие же, и поэтому я попробовал это:

print(X_train[0,:3])
print(X_train[0][:3])

#Output
[59. 62. 63.]
[59. 62. 63.]

Итак, оба этих X_train[0,:3] и X_train[0][:3] эквивалентны?

  • 2
    Для NumPy да, они эквивалентны в выходе. Обратите внимание, что первый синтаксис - это конкретно индексирование с нуля; Ванильный питон не работает таким же образом.
Теги:
arrays
numpy
python-3.x
indexing

1 ответ

3
Лучший ответ

Эквивалент с точки зрения выхода да, но с точки зрения того, что происходит под капотом... нет.

В случае X_train[0,:3] существует один вызов __getitem__ для массива. Во втором случае есть tmp = X_train[0] с одним __getitem__ который возвращает временный массив (обычно это представление в оригинале... ваш пробег может меняться), за которым следует следующий tmp[:3] который является дополнительным __getitem__ call - что не так много накладных расходов, но если вы можете сделать это лучше, почему это хуже?

  • 0
    Еще одна вещь, которую нужно спросить, поэтому X_train [0] и X_train [0 ,:] вычислительно эквивалентны, поскольку они оба должны выполнять вызов __getitem__ только один раз?
  • 0
    @subtleseeker один синтаксис является более простой версией другого, так что да.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню