Почему форма пуста?

Этот код создает массив из 10 элементов.

  1. Почему размер 1? Разве это не должно быть 0?
  2. почему форма пуста? Разве это не должно быть 1 измерение?
    In [14]: s = np.array(10)                                                                            

    In [15]: s                                                                                           
    Out[15]: array(10)

    In [16]: s.size                                                                                      
    Out[16]: 1

    In [17]: s.shape                                                                                     
    Out[17]: ()

Нет, это делает массив из одного элемента. arange(10) и ones(10) составляют массивы из 10 элементов.

hpaulj 02.02.2019 21:04

Если это был массив из 10 элементов, почему его размер равен 0?

mkrieger1 02.02.2019 21:08

@hpaulj Является ли форма массива из одного элемента пустой ()?

marlon 02.02.2019 21:26

Массивы numpy могут быть 0d, 1d, 2d и до 32. shape — это кортеж с одним значением для каждого измерения. (10,) — это кортеж из 1 элемента, () — кортеж из 0 элементов. np.array(10) — это массив 0d, np.array([10]) — 1d, np.array([[10]]) — 2d.

hpaulj 02.02.2019 22:15
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
4
2 674
1

Ответы 1

Если кто-то вызывает np.array() для произвольного объекта, который не является итерируемым, numpy молча создает пустой массив без размеров. Однако его размер равен 1.

Документы пустого размера говорит нам, что x.size эквивалентен вызову np.prod(x.shape). А документы для np.prod утверждает, что вызов np.prod на пустой последовательности дает нам 1. Вероятно, это связано с тем, что 1 является нейтральным элементом для умножения, что означает следующее.

Скажем, у вас есть массив [4, 2, 3]. Его продуктом элементов является 24. Теперь вы разделяете его на два массива: [4] и [2, 3]. У вас есть хорошая собственность: np.prod([4, 2, 3]) == np.prod([4]) * np.prod([2, 3]). Но если один из массивов пуст, вы хотите сохранить это свойство: np.prod([4, 2, 3]) == np.prod([]) * np.prod([4, 2, 3]).

"молча создает пустой массив", np.array(10) --- Создает ли это пустой массив или массив из одного элемента? Если это одноэлементный массив, то он должен иметь размерность? Или, как сказал @hapaulj, это 0-мерный массив.

marlon 02.02.2019 22:20

@marlon Нет, это пустой массив. В нем нет элементов. Если вы попытаетесь вызвать s[0], это вызовет ошибку.

sooobus 02.02.2019 22:22

@soobus, мы смотрим на «np.array (10)», а не на «np.array ()»? Является ли первый пустой массив?

marlon 02.02.2019 22:23

@марлон Да. Попробуйте вызвать np.array(np.array). Или np.array(int). Или np.array("мяу"). Все они не похожи на массивы и поэтому дают один и тот же результат — массив без элементов и с пустыми измерениями.

sooobus 02.02.2019 22:30

np.array(10) --- Это массив "без элементов"? Если да, то какова цель создания этого массива?

marlon 02.02.2019 23:50

@marlon нет «цели», просто «гарантированное поведение». Документы говорят нам, что произойдет, если вы передадите туда iterable, и больше ничего не говорят. Так что поведение могло быть любым. Например, может выдавать ошибку, но почему-то молчит.

sooobus 03.02.2019 11:53

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