我是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
与浮点数相乘?
答案 0 :(得分:0)
x
是一个Python list
。 x*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()