【问题标题】:Convert python ndarray to matlab matrix将python ndarray转换为matlab矩阵
【发布时间】:2017-03-10 18:26:12
【问题描述】:

我从 matlab (R2015b) 调用我创建的 python 模块。现在我注意到了,我们只能向 python 发送一个 1xN 向量。

所以我在 Matlab 中修复了这个问题

Matlab 代码:

a = ones(3, 3);
a = a(:).';

然后我将a作为参数发送给python函数。

 m = py.computeCoreset.computecoreset(a, obj.coresetSize);

现在我的问题是 python 不返回 Matlab 矩阵 我注意到我在调试时返回了一个 ndarray。

这是我的python代码:

import numpy as np


def computecoreset(mat, coresetSize):
    return np.random.choice(mat, coresetSize)

我想我需要再次将 ndarray 设为矩阵

但是我该如何转换呢?

提前致谢!

【问题讨论】:

  • 当你使用你展示的功能时会发生什么?
  • 您的 Python 代码显然会返回一个 numpy 数组,但接口代码不会从中创建某种 MATLAB 对象吗? MATLAB 环境中不能存在 numpy 数组。详细说明如何从 MATLAB 调用 Python 代码。

标签: python matlab python-2.7 numpy


【解决方案1】:

【讨论】:

  • 我认为使用nditer(x) 的目的是将x 的元素序列化为一维序列。在这种情况下,x 是一维的,所以我认为没有必要使用nditer()
【解决方案2】:

这是在黑暗中拍摄的,因为我没有 Matlab 来测试它,但我怀疑你必须返回一个 python array 对象,而不是一个 numpy 数组。 所以是这样的:

import numpy as np
import array


def computecoreset(mat, coresetSize):
    c = np.random.choice(mat, coresetSize)
    return array.array('d', c)

【讨论】:

    【解决方案3】:

    为了完整起见,另一种方式是这样的:

    rnd = rand(5);
    py.numpy.asarray(rnd)
    
    
      Python ndarray:
    
        0.3112    0.6541    0.2290    0.9961    0.0046
        0.5285    0.6892    0.9133    0.0782    0.7749
        0.1656    0.7482    0.1524    0.4427    0.8173
        0.6020    0.4505    0.8258    0.1067    0.8687
        0.2630    0.0838    0.5383    0.9619    0.0844
    
        Use details function to view the properties of the Python object.
    
        Use double function to convert to a MATLAB array.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多