В каком-то смысле здесь уже есть отличный ответ:
Не стоит слишком много думать об этом. В конечном итоге это лучше для психического здоровья и долголетия человека.
Психическое здоровье и долголетие, конечно, хороши, но как насчет гордости этого человека, который получил еще один удар, пытаясь быть умным, и жестоко отвергнутый придурком:
Рассмотрим следующее, где мы начинаем с некоторых байтовых данных:
a = np.linspace(0,255,6, dtype=np.uint8)
a
# array([ 0, 51, 102, 153, 204, 255], dtype=uint8)
Предположим, мы хотим что-то добавить и продвинуть тип, чтобы он не зацикливался. Со скаляром это не работает:
b = np.uint16(1)
a + b
# array([ 1, 52, 103, 154, 205, 0], dtype=uint8)
Но с массивом это делает:
c = np.ones(1, np.uint16)
a + c
# array([ 1, 52, 103, 154, 205, 256], dtype=uint16)
Я подумал, давайте сделаем массив.
b[...]
# array(1, dtype=uint16)
np.isscalar(b[...])
# False
Но увы:
a + b[...]
# array([ 1, 52, 103, 154, 205, 0], dtype=uint8)
Почему этот массив 0d ведет себя здесь как скаляр?
np.isscalar(b)
иb=np.uint(16)
вернули мне True. Какую версию ты используешь? Numpy 1.15 здесь. - person knh190   schedule 28.05.2019np.isscalar(b[...])
(не пропустите многоточие)? - person Paul Panzer   schedule 28.05.2019ndim
почти везде. - person knh190   schedule 28.05.2019np.isscalar(b[...])
является ложным на Numpy 1.16.3, поскольку b [...] действительно является массивом numpy. Думаю, этот ответ (stackoverflow.com/a/42191121/10640534) поможет. - person Patol75   schedule 28.05.2019isscalar
- это просто набор тестовtype
иisinstance
. Я не знаю, есть ли хорошее применениеnp.uint8(1)
стилю строительства. Мне это кажется новичком.np.array(1, np.uint8)
выглядит лучше с немного более полным набором методов. - person hpaulj   schedule 28.05.2019np.array([1], np.uint16)
производит продвижение dtype, аnp.array(1, np.uint16)
нет (т.е. 1d против 0d). - person hpaulj   schedule 28.05.2019a + np.ones((0,1),uint16)
- person Paul Panzer   schedule 28.05.2019