>>> from numpy import *
>>> m = array([1,2,3,4])
>>> m
array([1, 2, 3, 4])
>>> type(m)
<type 'numpy.ndarray'>
>>> m + 0.3
array([ 1.3, 2.3, 3.3, 4.3])
>>> m[1] = m[1] + 0.4
>>> m
array([1, 2, 3, 4])
>>> m[1] = m[1] + 3
>>> m
array([1, 5, 3, 4])
>>> from numpy import *
>>> m = array([1,2,3,4])
>>> m
array([1, 2, 3, 4])
>>> type(m)
<type 'numpy.ndarray'>
>>> m + 0.3
array([ 1.3, 2.3, 3.3, 4.3])
>>> m[1] = m[1] + 0.4
>>> m
array([1, 2, 3, 4])
>>> m[1] = m[1] + 3
>>> m
array([1, 5, 3, 4])
>>> m.dtype
dtype('int64')
>>> m + 0.3
array([ 1.3, 2.3, 3.3, 4.3])
>>> m[1] = m[1] + 0.4
>>> m
array([1, 2, 3, 4])
>>> lst = [1,2,3,4]
>>> lst[1] = lst[1] + 0.3
>>> lst
[1, 2.2999999999999998, 3, 4]
>>> type(lst[0])
<type 'int'>
>>>
>>> type(lst[1])
<type 'float'>
>>>
Андрей СветловНаверное, честнее было бы бросать исключение. Тогда бы и вопросов таких не было.
Присваивание ячейки тип массива не изменяет. Если ячейке целого массива присваивается число с плавающей точкой, оно сначала преобразуется к целому типу, что вы и видите.
Никакой магии.
Андрей СветловДа, в этом получается и кроется суть проблемы.=(( Не знаю как насчёт исключения, но не очень интуитивное поведение на мой взгляд, хотя наверное если бы я пользовался numpy, то вероятно знал бы такие вещи и глупых вопросов не возникало.
Массивы же в numpy имеют один тип на все ячейки.