你应该做x
and 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
is anumpy.float64
标量,不是标准的 Pythonfloat
.
我实际上认为 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])