Python 类型错误:';numpy.float64';对象不能解释为整数,转换为int失败

Python 类型错误:';numpy.float64';对象不能解释为整数,转换为int失败,python,numpy,scipy,Python,Numpy,Scipy,我的代码- import networkx as nx import random import numpy as np import matplotlib.pyplot as plt import math def avg_deg(self,num_nodes): return self.number_of_edges() * 2 / num_nodes def avg_degree(num_nodes,target_deg): G=nx.Graph()

我的代码-

import networkx as nx
import random
import numpy as np
import matplotlib.pyplot as plt
import math

def avg_deg(self,num_nodes):
        return self.number_of_edges() * 2 / num_nodes


def avg_degree(num_nodes,target_deg):

    G=nx.Graph()

    G.add_nodes_from(range(num_nodes))
    while avg_deg(G,num_nodes) < target_deg:
        n1, n2 = random.sample(G.nodes(), 2)
        G.add_edge(n1, n2, weight=1)

    return G    

a=np.arange(0,1, 0.001)
p_values=a.tolist()
p_values.pop(0)

graph=avg_degree(10000,4)

n_original=nx.number_of_nodes(graph)    

n_edges = graph.number_of_edges()
graph.remove_edges_from(random.sample(graph.edges(),k=int(0.9*n_edges)))
data=[len(c) for c in sorted(nx.connected_components(graph), key=len, reverse=True)]



xx= list(set(data))

yy= [data.count(x) for x in set(data)]

xx = [math.log(record) for record in xx]
yy =  [math.log(record) for record in yy]

plt.plot(xx,yy,'ro')
plt.xlabel('log(cluster_size)')
plt.ylabel('log(frequency)')
#plt.show()

plt.figure()

##################calculating exponent
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit


def func(x, a, b, c):
    return a* np.exp(-b * x) + c

popt, pcov = curve_fit(func, xx, yy,maxfev=5000)


plt.plot(xx, func(xx, *popt), 'r-',label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))    


plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
我试图通过将所有的a,b,c转换为int来解决这个问题,但这也给了我一个错误-

D:\anaconda\lib\site-packages\scipy\optimize\minpack.py:785: OptimizeWarning: Covariance of the parameters could not be estimated
  category=OptimizeWarning)
Traceback (most recent call last):
  File "gaussian.py", line 87, in <module>
    plt.plot(xx, func(xx, *popt), 'r-',label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))
  File "D:\anaconda\lib\site-packages\matplotlib\pyplot.py", line 3261, in plot
    ret = ax.plot(*args, **kwargs)
  File "D:\anaconda\lib\site-packages\matplotlib\__init__.py", line 1717, in inner
    return func(ax, *args, **kwargs)
  File "D:\anaconda\lib\site-packages\matplotlib\axes\_axes.py", line 1372, in plot
    for line in self._get_lines(*args, **kwargs):
  File "D:\anaconda\lib\site-packages\matplotlib\axes\_base.py", line 404, in _grab_next_args
    for seg in self._plot_args(this, kwargs):
  File "D:\anaconda\lib\site-packages\matplotlib\axes\_base.py", line 384, in _plot_args
    x, y = self._xy_from_xy(x, y)
  File "D:\anaconda\lib\site-packages\matplotlib\axes\_base.py", line 243, in _xy_from_xy
    "have shapes {} and {}".format(x.shape, y.shape))
ValueError: x and y must have same first dimension, but have shapes (11,) and (0,)
TypeError: 'numpy.float64' object cannot be interpreted as an integer
D:\anaconda\lib\site packages\scipy\optimize\minpack.py:785:optimize警告:无法估计参数的协方差
类别=警告)
回溯(最近一次呼叫最后一次):
文件“gaussian.py”,第87行,在
plt.plot(xx,func(xx,*popt),'r-',label='fit:a=%5.3f,b=%5.3f,c=%5.3f'%tuple(popt))
文件“D:\anaconda\lib\site packages\matplotlib\pyplot.py”,第3261行,在plot中
ret=最大绘图(*args,**kwargs)
文件“D:\anaconda\lib\site packages\matplotlib\\uuuu init\uuuu.py”,第1717行,在内部
返回函数(ax,*args,**kwargs)
文件“D:\anaconda\lib\site packages\matplotlib\axes\\u axes.py”,第1372行,在绘图中
对于自身中的行。获取行(*args,**kwargs):
文件“D:\anaconda\lib\site packages\matplotlib\axes\\u base.py”,第404行,位于下一个参数中
对于seg in self.\u plot\u args(此为kwargs):
文件“D:\anaconda\lib\site packages\matplotlib\axes\\u base.py”,第384行,在绘图参数中
x、 y=自。_xy_自_xy(x,y)
文件“D:\anaconda\lib\site packages\matplotlib\axes\\u base.py”,第243行,在\u xy\u中
“有形状{}和{}”。格式(x.shape,y.shape))
ValueError:x和y必须具有相同的第一维度,但具有形状(11)和(0)
TypeError:“numpy.float64”对象不能解释为整数

我的代码在图形中绘制日志(频率)与日志(集群大小)。现在我想找到指数曲线的a,b和c,因此我使用了scipy函数。基本上,我试图找到斜率~pk^-y,我试图找到y,因此我想使用scipy的曲线拟合方法来找到它。

您应该将函数
func
更改为

定义函数(x,a,b,c): 返回a*np.exp(-b*np.array(x))+c
因为这里的参数应该是
numpy数组
而不是python列表

错误是什么?ValueError还是TypeError?您确定错误来自正在浮动的对象吗?这应该适用于函数表达式。@JohanL TypeError:“numpy.float64”对象不能在返回a*np.exp(-b*x)+cb的行中解释为整数,但为什么该行中的任何内容都应该解释为整数?这就是函数EXRPESION,据我所知,它应该可以处理
numpy.float64
参数。@JohanL是的,没错……我也很困惑……这就是为什么我把整个代码放在这里,我无法解决问题的原因
alist*int
意味着复制列表
alist*漂浮
引发错误。如果您同时创建了
xx
yy
numpy数组,这些错误应该会消失。您还可以使用
yy=np.log(yy)
等。
D:\anaconda\lib\site-packages\scipy\optimize\minpack.py:785: OptimizeWarning: Covariance of the parameters could not be estimated
  category=OptimizeWarning)
Traceback (most recent call last):
  File "gaussian.py", line 87, in <module>
    plt.plot(xx, func(xx, *popt), 'r-',label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))
  File "D:\anaconda\lib\site-packages\matplotlib\pyplot.py", line 3261, in plot
    ret = ax.plot(*args, **kwargs)
  File "D:\anaconda\lib\site-packages\matplotlib\__init__.py", line 1717, in inner
    return func(ax, *args, **kwargs)
  File "D:\anaconda\lib\site-packages\matplotlib\axes\_axes.py", line 1372, in plot
    for line in self._get_lines(*args, **kwargs):
  File "D:\anaconda\lib\site-packages\matplotlib\axes\_base.py", line 404, in _grab_next_args
    for seg in self._plot_args(this, kwargs):
  File "D:\anaconda\lib\site-packages\matplotlib\axes\_base.py", line 384, in _plot_args
    x, y = self._xy_from_xy(x, y)
  File "D:\anaconda\lib\site-packages\matplotlib\axes\_base.py", line 243, in _xy_from_xy
    "have shapes {} and {}".format(x.shape, y.shape))
ValueError: x and y must have same first dimension, but have shapes (11,) and (0,)
TypeError: 'numpy.float64' object cannot be interpreted as an integer