Какой аргумент передается в `np.ones` и как он здесь работает?

На самом деле я хотел умножить массив на 3 и попытался использовать * 3 внутри фигуры. Затем я понял, что это должно быть вне np.ones, таких как np.ones((1,2))*4. Но мне было интересно, почему это дает экспоненциальные результаты. Может кто-нибудь объяснить мне поведение ниже?

np.ones((1,2)*1) возвращается array([[1., 1.]])

np.ones((1,2)*2) возвращается

array([[[[1., 1.]],
        [[1., 1.]]]])

np.ones((1,2)*3) возвращается

array([[[[[[1., 1.]],
          [[1., 1.]]]],
        [[[[1., 1.]],
          [[1., 1.]]]]]])

Точно так же np.ones((1,2)*4) возвращает

array([[[[[[[[1., 1.]],
            [[1., 1.]]]],
          [[[[1., 1.]],
            [[1., 1.]]]]]],
        [[[[[[1., 1.]],
            [[1., 1.]]]],
          [[[[1., 1.]],
            [[1., 1.]]]]]]]])

К сожалению, в документация нет никаких пояснений по этому поводу.

Вы случайно применяете оператор умножения к кортежам, а затем передаете их в np.ones.

cs95 09.04.2019 10:35

Запустите (1, 2) * 3 в python REPL и посмотрите, что произойдет. Затем передайте этот результат в np.ones и посмотрите, что произойдет снова. Небольшой эксперимент - это все, что вам нужно сделать.

cs95 09.04.2019 10:35
(1,2)*3 делает (1, 2, 1, 2, 1, 2) но np.ones((1,2)*3) дает array([[[[[[1., 1.]], [[1., 1.]]]], [[[[1., 1.]], [[1., 1.]]]]]])
SriniV 09.04.2019 10:39

А что такое np.ones((1,2)*3).shape?

cs95 09.04.2019 10:40

то же, что (1,2)*3. Интересно. Не могли бы вы объяснить суть?

SriniV 09.04.2019 10:41
np.ones принимает параметр «форма» и возвращает массив N-D в соответствии с формой. Если вы укажете np.ones((10,)), вы получите 1D-массив с 10 элементами... np.ones((3, 5)) даст вам 2D-массив размером 3x5 с 3*5=15 элементами,... и так далее. Вы поняли идею.
cs95 09.04.2019 10:43

Прохладный. Не могли бы вы добавить это в качестве ответа?

SriniV 09.04.2019 10:44
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
7
144
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

np.ones принимает параметр shape и возвращает массив N-D в соответствии с вашей спецификацией. Например, с помощью np.ones((10,)) вы получите одномерный массив из 10 элементов... np.ones((3, 5)) предоставит вам двумерный массив размером 3x5 с 3*5=15 элементами... и так далее.

Теперь вы сделали (например) (1, 2) * 3, что, если вы запустите REPL на питоне, покажет

(1, 2) * 3
# (1, 2, 1, 2, 1, 2)

Передача этого в np.ones вернет 6D-массив формы (1, 2, 1, 2, 1, 2) с 8 элементами.

np.ones((1, 2)*3)     
array([[[[[[1., 1.]],    
          [[1., 1.]]]],
        [[[[1., 1.]],    
          [[1., 1.]]]]]])

_.shape
# (1, 2, 1, 2, 1, 2)

И аналогично, для остальных.

Другие вопросы по теме