为什么"不能将序列乘以非int类型' float'"我运行代码后出现?

时间:2017-05-24 01:13:32

标签: python python-3.x math matplotlib

我是python的新手。我自己学习并弄清楚发生了什么,但现在,我真的陷入了困境。请帮我弄清楚我的问题。

import matplotlib.pyplot as plt
import math

x = [-0.006,-0.005,-0.004,-0.003,-0.002,-0.001,0,0.001,0.002,0.003,0.004,0.005,0.00]
y = [220*(1 - (0.85*math.exp(-math.pi**2/math.log(2)*(x*0.53*10**-9/759.5*10**-9)**2)))]

plt.plot(x,y)
plt.xlabel('optical path difference')
plt.ylabel('coincidence counts in 3 min')

plt.show()

运行后,它会返回错误:

TypeError: can't multiply sequence by non-int of type 'float'

我如何更改代码,以便将列表x与浮点数相乘?

2 个答案:

答案 0 :(得分:0)

x是一个Python listx*0.53是非感性的(除了numpy类型之外的任何类型的序列乘法意味着“多次重复序列”,并且它是离散乘数,您不能取序列的前53%)。

您的意思是将x转换为numpy数组还是什么?或者单独处理每个元素?

答案 1 :(得分:0)

您不能将列表与浮点值相乘。虽然列表可以"倍增"有一个整数,这对你没有帮助。

相反,您可以使用numpy。 numpy数组可以乘以一个数字或另一个numpy数组。

[1,2,3] * 3                           # [1, 2, 3, 1, 2, 3, 1, 2, 3]
[1,2,3] * 3.3                         # can't multiply sequence by non-int of type 'float'
np.array([1,2,3]) * 3                 # [3 6 9]
np.array([1,2,3]) * np.array([1,2,3]) # [1 4 9]

所以这里的解决方案是首先使用make x一个numpy数组。然后,您还必须删除y中的方括号。

import matplotlib.pyplot as plt
import numpy as np

x = [-0.006,-0.005,-0.004,-0.003,-0.002,-0.001,0,0.001,0.002,0.003,0.004,0.005,0.006]
x = np.array(x)
y = 220*(1 - (0.85*np.exp(-np.pi**2/np.log(2)*(x*0.53e-9/759.5e-9)**2)))

plt.plot(x,y)
plt.xlabel('optical path difference')
plt.ylabel('coincidence counts in 3 min')

plt.show()

enter image description here