将Python的ndarray转换为Matlab矩阵

3

我正在从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转换为矩阵。
但是如何进行转换呢?
提前感谢!

当您使用所展示的函数时会发生什么? - Warren Weckesser
你的Python代码显然返回一个numpy数组,但是接口代码不会从中创建某种MATLAB对象吗?numpy数组无法存在于MATLAB环境中。请详细说明如何从MATLAB调用Python代码。 - hpaulj
3个回答

6

我认为使用nditer(x)的目的是将x的元素序列化为一个一维序列。在这种情况下,x是一维的,因此我不认为使用nditer()是必要的。 - Warren Weckesser

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)

1

为了完整起见,另一种方法如下:

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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接