小编kun*_*hil的帖子

使用Scipy拟合Weibull分布

我试图重新创建最大似然分布拟合,我已经可以在Matlab和R中做到这一点,但现在我想使用scipy.特别是,我想估计我的数据集的Weibull分布参数.

我试过这个:

import scipy.stats as s
import numpy as np
import matplotlib.pyplot as plt

def weib(x,n,a):
    return (a / n) * (x / n)**(a - 1) * np.exp(-(x / n)**a)

data = np.loadtxt("stack_data.csv")

(loc, scale) = s.exponweib.fit_loc_scale(data, 1, 1)
print loc, scale

x = np.linspace(data.min(), data.max(), 1000)
plt.plot(x, weib(x, loc, scale))
plt.hist(data, data.max(), normed=True)
plt.show()
Run Code Online (Sandbox Code Playgroud)

得到这个:

(2.5827280639441961, 3.4955032285727947)
Run Code Online (Sandbox Code Playgroud)

并且看起来像这样的分布:

使用Scipy进行威布尔分布

我一直exponweib在阅读http://www.johndcook.com/distributions_scipy.html.我也尝试了scipy中的其他Weibull函数(以防万一!).

在Matlab(使用分布拟合工具 - 参见屏幕截图)和R(使用MASS库函数fitdistr和GAMLSS包)中,我得到(loc)和b(比例)参数更像1.58463497 5.93030013.我相信所有三种方法都使用最大似然法进行分布拟合.

威布尔分布使用Matlab

如果你想去,我已经在这里发布了我的数据!为了完整起见,我使用的是Python 2.7.5,Scipy 0.12.0,R 2.15.2和Matlab 2012b.

为什么我会得到不同的结果!?

python numpy distribution scipy weibull

32
推荐指数
4
解决办法
4万
查看次数

R中%*%的含义是什么

我正在遵循一些代码,我可以应用所有内容,直到我得到命令:

s1 %*% cc1$xcoef
Run Code Online (Sandbox Code Playgroud)

这条线对我不起作用,我找不到解释它的目的的文档.我收到此错误:

Error in s1 %*% cc1$xcoef : non-conformable arguments
Run Code Online (Sandbox Code Playgroud)

%*%能做什么,可以使用其他功能吗?

我正在使用R版本3.0.3(2014-03-06)"温暖的小狗"

r

20
推荐指数
2
解决办法
7万
查看次数

在Python中计算累积密度函数的导数

是否存在累积密度函数的精确导数是概率密度函数(PDF)?我正在使用计算导数numpy.diff(),这是正确的吗?见下面的代码:

import scipy.stats as s
import matplotlib.pyplot as plt
import numpy as np

wei = s.weibull_min(2, 0, 2) # shape, loc, scale - creates weibull object
sample = wei.rvs(1000)
shape, loc, scale = s.weibull_min.fit(sample, floc=0) 

x = np.linspace(np.min(sample), np.max(sample))

plt.hist(sample, normed=True, fc="none", ec="grey", label="frequency")
plt.plot(x, wei.cdf(x), label="cdf")
plt.plot(x, wei.pdf(x), label="pdf")
plt.plot(x[1:], np.diff(wei.cdf(x)), label="derivative")
plt.legend(loc=1)
plt.show()
Run Code Online (Sandbox Code Playgroud)

CDF,PDF和衍生品的比较

如果是这样,我如何缩放衍生物以等同于PDF?

python statistics numpy scipy probability-density

9
推荐指数
1
解决办法
3515
查看次数

使用多处理时共享无锁的 ctypes numpy 数组

我有一个大数组(~500k 行 x 9 列),我想在使用 Pythonmultiprocessing模块运行多个并行进程时共享它。我正在使用这个 SO答案来创建我的共享数组,我从这个 SO答案中了解到该数组已被锁定。但是,在我的情况下,因为我从来没有同时写入同一行,所以锁是多余的,会增加处理时间。

lock=False但是,当我指定时,出现错误。

我的代码是这样的:

shared_array_base = multiprocessing.Array(ctypes.c_double, 90, lock=False)
shared_array = np.ctypeslib.as_array(shared_array_base.get_obj())
shared_array = shared_array.reshape(-1, 9)
Run Code Online (Sandbox Code Playgroud)

错误是这样的:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-15-d89681d70c37> in <module>()
      1 shared_array_base = multiprocessing.Array(ctypes.c_double, len(np.unique(value)) * 9, lock=False)
----> 2 shared_array = np.ctypeslib.as_array(shared_array_base.get_obj())
      3 shared_array = shared_array.reshape(-1, 9)

AttributeError: 'c_double_Array_4314834' object has no attribute 'get_obj'
Run Code Online (Sandbox Code Playgroud)

我的问题是如何共享每次写入时未锁定的 numpy 数组?

python numpy multiprocessing

5
推荐指数
1
解决办法
1246
查看次数

无组织点云中的点数

我想知道使用 PCL 的点云中的点数。点云是使用创建的pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_z(new pcl::PointCloud<pcl::PointXYZ>);。然后使用过滤器进行填充,该过滤器基本上从较大的点云创建子集。点云是无组织的。

我猜我需要归还width,但不知道如何做到这一点。当然,这是一个简单的答案,但我是 c++ 和 PCL 的新手。

c++ point-cloud-library

1
推荐指数
1
解决办法
7006
查看次数