Ответ 1
Вы должны сделать x
и y
массивы numpy, а не списки:
x = np.array([0.46,0.59,0.68,0.99,0.39,0.31,1.09,
0.77,0.72,0.49,0.55,0.62,0.58,0.88,0.78])
y = np.array([0.315,0.383,0.452,0.650,0.279,0.215,0.727,0.512,
0.478,0.335,0.365,0.424,0.390,0.585,0.511])
При этом изменении он производит график ожидания. Если они являются списками, m * x
не приведет к ожидаемому результату, а будет пустым. Обратите внимание, что m
является скаляром numpy.float64
, а не стандартным Python float
.
Я действительно считаю это немного сомнительным поведением Numpy. В обычном Python умножение списка с целым числом просто повторяет список:
In [42]: 2 * [1, 2, 3]
Out[42]: [1, 2, 3, 1, 2, 3]
при умножении списка с поплавком дает ошибку (как мне кажется):
In [43]: 1.5 * [1, 2, 3]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-43-d710bb467cdd> in <module>()
----> 1 1.5 * [1, 2, 3]
TypeError: can't multiply sequence by non-int of type 'float'
Странно, что, по-видимому, работает умножение списка Python с помощью сканера Numpy:
In [45]: np.float64(0.5) * [1, 2, 3]
Out[45]: []
In [46]: np.float64(1.5) * [1, 2, 3]
Out[46]: [1, 2, 3]
In [47]: np.float64(2.5) * [1, 2, 3]
Out[47]: [1, 2, 3, 1, 2, 3]
Итак, кажется, что float усекается до int, после чего вы получаете стандартное поведение Python повторения списка, что является довольно неожиданным поведением. Лучше всего было бы поднять ошибку (чтобы вы сами заметили проблему, а не задавали свой вопрос в Stackoverflow) или просто отображали ожидаемое умножение по типу (в котором ваш код только что работал), Интересно, что добавление между списком и сканированием Numpy работает:
In [69]: np.float64(0.123) + [1, 2, 3]
Out[69]: array([ 1.123, 2.123, 3.123])