直接从MATLAB内直接在Python中使用Sklearn



请不要将其标记为如何调用Matlab的Python和Sklearn的重复?在我看来,这个问题并没有真正回答。
由于我认为MATLAB版本R2014B,因此可以直接使用Matlab的Python。
简而我是我的设置(在用命令pyversion('PATH_TO_PYTHON')给MATLAB提供Python路径后,运行良好。我什至可以使用dask多处理。非常酷。例如,执行py.dask.distributed.Client

中执行
  Python Client with properties:
              asynchronous: 0
                   cluster: [1×1 py.distributed.deploy.local.LocalCluster]
         get_futures_error: [1×1 py.method]
                coroutines: [1×1 py.list]
            scheduler_file: [1×1 py.NoneType]
                      loop: [1×1 py.tornado.platform.select.SelectIOLoop]
    recreate_error_locally: [1×1 py.method]
                  refcount: [1×1 py.collections.defaultdict]
                extensions: [1×1 py.dict]
                 scheduler: [1×1 py.distributed.core.rpc]
                       rpc: [1×1 py.distributed.core.ConnectionPool]
                   futures: [1×1 py.dict]
            scheduler_comm: [1×1 py.distributed.batched.BatchedSend]
                    status: [1×7 py.str]
           connection_args: [1×1 py.dict]
                        id: [1×43 py.str]
                generation: [1×1 py.int]
                   io_loop: [1×1 py.tornado.platform.select.SelectIOLoop]
                  security: [1×1 py.distributed.security.Security]
    <Client: scheduler='tcp://127.0.0.1:59795' processes=4 cores=4>

回到一个问题:我已经安装了Sklearn,可以从引用的Python安装中使用它。它的工作方式与Dask相同。但是Matlab R2017A无法找到Sklearn。
与上述py.sklearn.cluster.dbscan给定的类似呼叫

导致
Undefined variable "py" or class "py.sklearn.cluster.dbscan".

是否有Python专家可以解释?

我从MathWorks支持中获得了一个解决方案。
它读到了方式,也许Python环境不是完全设置的。我被要求从Anaconda Prompt内部启动MATLAB,该CC_6具有完整的环境。从那里运行MATLAB产生了想要的结果,因此能够使用例如Sklearn。
进一步比较了从那里出现的差异,必须将更多来自Python的目录添加到系统搜索路径中。

进一步了解到,运行py.importlib.import_module(<MODULENAME>)将显示详细信息是否可用。

在Mac上:

  • 打开一个新的终端窗口;

  • 类型: which python (找出安装python的默认版本);

  • 重新启动matlab;

  • 类型: pyversion('/anaconda2/bin/python') ,在命令行(显然用路径替换)。
  • 现在,您可以在默认的Python安装中运行所有库。

例如:

>>py.sys.version;
>>py.sklearn.cluster.dbscan

您可以创建一个conda环境并从matlab中使用如下。请注意,您正在同时调试Python,并且对py0进行更改,您必须每次重新加载它(以下以clear classes开头的代码是如何做到的):

py_root_useFromMATLAB = fileparts(C:anaconda_3envsuseFromMATLAB_conda.exe);
ENV = getenv('PATH');
ENV = strsplit(ENV, ';');
items_to_add_to_path = {
    fullfile(py_root_useFromMATLAB, 'Library', 'mingw-w64', 'bin')
    fullfile(py_root_useFromMATLAB, 'Library', 'usr', 'bin')
    fullfile(py_root_useFromMATLAB, 'Library', 'bin')
    fullfile(py_root_useFromMATLAB, 'Scripts')
    };
ENV = [items_to_add_to_path(:); ENV(:)];
ENV = unique(ENV, 'stable');
ENV = strjoin(ENV, ';');
setenv('PATH', ENV);
clear classes
module_to_load = 'some_awesome_python_module';
python_module_to_use = py.importlib.import_module(module_to_load);
py.importlib.reload(python_module_to_use);

现在您可以使用它:

output = py.some_awesome_python_module.some_awesome_python_function(input)

相关内容

  • 没有找到相关文章

最新更新