Этот код создает массив из 10 элементов.
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]: ()
Если это был массив из 10 элементов, почему его размер равен 0?
@hpaulj Является ли форма массива из одного элемента пустой ()?
Массивы numpy могут быть 0d, 1d, 2d и до 32. shape — это кортеж с одним значением для каждого измерения. (10,) — это кортеж из 1 элемента, () — кортеж из 0 элементов. np.array(10) — это массив 0d, np.array([10]) — 1d, np.array([[10]]) — 2d.






Если кто-то вызывает 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 Нет, это пустой массив. В нем нет элементов. Если вы попытаетесь вызвать s[0], это вызовет ошибку.
@soobus, мы смотрим на «np.array (10)», а не на «np.array ()»? Является ли первый пустой массив?
@марлон Да. Попробуйте вызвать np.array(np.array). Или np.array(int). Или np.array("мяу"). Все они не похожи на массивы и поэтому дают один и тот же результат — массив без элементов и с пустыми измерениями.
np.array(10) --- Это массив "без элементов"? Если да, то какова цель создания этого массива?
@marlon нет «цели», просто «гарантированное поведение». Документы говорят нам, что произойдет, если вы передадите туда iterable, и больше ничего не говорят. Так что поведение могло быть любым. Например, может выдавать ошибку, но почему-то молчит.
Нет, это делает массив из одного элемента.
arange(10)иones(10)составляют массивы из 10 элементов.