无法绘制我的函数:返回array(a,dtype,copy = False,order = order)TypeError:float()参数必须为字符串或数字

妮莉

我正在尝试绘制一个函数,该函数给出几个散点图的角度的反正切(这是一个物理实验):

通过实验获得的散点图

这是我的代码:

import numpy as np
import matplotlib.pyplot as plt

filename='rawPhaseDataf2f_17h_15m.dat'
datatype=np.dtype( [('Shotnumber',np.dtype('>f8')),('A1',np.dtype('>f8')),      ('A2',np.dtype('>f8')), ('f2f',np.dtype('>f8')), ('intensity',np.dtype('>f8'))])
data=np.fromfile(filename,dtype=datatype)

#time=data['Shotnumber']/9900 # reprate is 9900 Hz -> time in seconds
A1=data['A1']
A2=data['A2']

#np.sort()
i=range(1,209773) 

def x(i) :
    return arctan((A1.item(i)/A2.item(i))*(i/209772))
def y(i) : 
    return i*2*pi/209772

plot(x,y)

plt.figure('Scatterplot')
plt.plot(A1,A2,',') #Scatterplot
plt.xlabel('A1')
plt.ylabel('A2')

plt.figure('2D Histogram')
plt.hist2d(A1,A2,100) # 2D Histogram
plt.xlabel('A1')
plt.ylabel('A2')

plt.show()

我的错误是:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/spyderlib/widgets/externalshell   /sitecustomize.py", line 540, in runfile
    execfile(filename, namespace)
  File "/home/nelly/Bureau/ Téléchargements/Kr4  Experiment/read_rawPhaseData.py", line 21, in <module>
    plot(x,y)
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2987, in plot
ret = ax.plot(*args, **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 4138, in plot
self.add_line(line)
  File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 1497, in add_line
self._update_line_limits(line)
  File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 1508, in _update_line_limits
path = line.get_path()
  File "/usr/lib/pymodules/python2.7/matplotlib/lines.py", line 743, in get_path
    self.recache()
  File "/usr/lib/pymodules/python2.7/matplotlib/lines.py", line 420, in recache
    x = np.asarray(xconv, np.float_)
  File "/usr/lib/python2.7/dist-packages/numpy/core/numeric.py", line 460, in asarray
    return array(a, dtype, copy=False, order=order)
TypeError: float() argument must be a string or a number

我知道问题出在哪里plot(x,y)我认为我的错误来自定义xyA1A2是矩阵,N是点的数量,是矩阵Ak的索引。我想拥有arctan(A1k/A2k)*(k/N)

双锂矩阵

您的代码以及对python和数组操作的理解有很多问题。我将只处理代码的第一部分(以及您收到的错误),希望您可以从那里继续进行修复。

这应该可以解决您得到的错误并生成图:

# size = 209772
size = A1.size    # I'm assuming that the size of the array is 209772

z = np.arange(1, size+1)/(size+1)   # construct an array from [1/209773, 1.0]
# Calculate the x and y arrays
x = np.arctan((A1/A2)*z)
y = z*2*pi

# Plot x and y
plt.plot(x, y)

讨论:

此代码段存在很多问题:

i=range(1,209773) 

def x(i) :
    return arctan((A1.item(i)/A2.item(i))*(i/209772))
def y(i) : 
    return i*2*pi/209772

plot(x, y)
  1. 您要定义两个称为和的函数,然后将这些函数传递给plotting方法。绘图方法接受数字(以列表或数组形式),而不是函数。这就是您得到错误的原因。因此,您需要构造一个数字列表/数组并将其传递给函数。xy

  2. 您正在定义一个变量i,它是一个数字列表。但是,当您定义函数x和时y,您将创建名为的新变量i,这些变量与您先前创建的列表无关。这是因为“ scope”在python中的工作方式

  3. 函数arctanplot不是在“全局”中定义的,而是仅在包numpy和中定义matplotlib因此,您需要那些程序包中调用它们

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章