2016-08-13 5 views
2

Прототипом reshape() является то, что reshape(shape, order="C"), а тип формы - кортеж. Итак, мы должны назвать эту функцию myarray.reshape((1000, 1, 32, 32)), но я считаю, что многие используют myarray.reshape(1000, 1, 32, 32), почему?Как понять функцию ndarray.reshape?

ответ

3

Это немного скрытая гибкость, встроенная в метод reshape.

Ключевое слово здесь должно быть четко: вы не можно сделать, например:

myarray.reshape(1000, 1, 32, 32, "C") 

Вы получите TypeError, говоря, что требуется целое.

(На самом деле, даже при использовании кортежа:.

myarray.reshape((1000, 1, 32, 32), "C") 

поднимает TypeError)

Если вы посмотрите на исходный код (например, в GitHub, вы увидите, что после того, как ключевые слова анализируются, есть проверка для 0 или 1 аргументов. В этом случае аргумент интерпретируется как кортеж. Если есть больше аргументов, каждый интерпретируется как целое и объединяется в кортеж как новая форма (ключевое слово аргументы уже сняты).


Что касается того, что вы должны использовать: я думаю, что на самом деле нет хорошего ответа.
Вы можете придерживаться документации и использовать кортежи.
Соглашение с несколькими целыми аргументами, однако, кажется довольно очевидным.

Соблюдайте соглашение, согласно которому вы или проект, над которым работаете, используются. Не используйте кортежи и отдельные целые аргументы в одном проекте.

+0

Ну, правильно ли, что python переопределяет индивидуальные целые аргументы в качестве кортежа, если прототип этой функции показывает, что он должен быть кортежем? Например, если прототип является 'function (tuple, other = something)', и я могу вызвать эту функцию 'function (tuple [0], tuple [1], other = something' без скобки кортежа. – Asuka

+0

Нет, отдельные целые числа автоматически не будет свернута в кортеж, вы можете просто попробовать свой пример и увидеть результат. Но прототип здесь в основном «function (* args, ** kwargs)». Вы можете утверждать, что документация лежит сквозь зубы. – Evert

+0

Ну, я думаю, что понимаю, когда найду прототип, спасибо. – Asuka

Смежные вопросы