使用选项从Matlab 2017调用Python

时间:2017-10-11 15:43:43

标签: python matlab

从MATLAB调用Python KS测试很简单:

foo = py.scipy.stats.ks_2samp(rand(1,50),rand(1,70));

但是当我以这种方式调用Anderson-Darling k样本测试时,我得到一个错误:

bar = py.scipy.stats.anderson_ksamp(rand(1,50),rand(1,70));
"Python Error: AxisError: axis -1 is out of bounds for array of dimension 0"

这样会导致另一个错误(在这里,我试图设置midrank = false,认为这可能是上一个错误的原因)

bar = py.scipy.stats.anderson_ksamp(rand(1,50),rand(1,70),false);
bar = py.scipy.stats.anderson_ksamp(rand(1,50),rand(1,70),'false');
bar = py.scipy.stats.anderson_ksamp(rand(1,50),rand(1,70),'midrank=false');
"Python Error: TypeError: anderson_ksamp() takes from 1 to 2 positional arguments but 3 were given"

我已阅读https://docs.scipy.org/doc/scipy/reference/stats.html以及有关从Matlab调用Python的旧问题,但较旧的问题不适用于当前的API。

问题1:如何在MATLAB中调用anderson_ksamp?
问题2:如何更改此测试的显着性水平?

1 个答案:

答案 0 :(得分:1)

你的功能参数错误。

ks_2samp expects接收两个变量向量,因此你很擅长。

anderson_ksamp expects接收系列的向量:

  

scipy.stats.anderson_ksamp (样本,midrank = True)

     

样品:1-D array_like序列

     

数组中的样本数据数组。

因此,您应该创建一个单元格数组,其中每个单元格都是一个样本矢量,并将其作为第一个参数传递,因为您的样本可能具有不同的维度。

如果要测试两个向量来自同一分布,则应使用常规anderson测试,这与Kolmogorov-Smirnov 2样本测试非常相似。只需连接值并将其作为单个向量发送。

至于显着性级别,您无法更改它们。它们是预定义的并且(至少)计算为10%,5%,2.5%和1%的水平。这对任何实际目的都足够了。