在Python中操作MATLAB数组

MATLAB包提供数组类来表示MATLAB数值数组并作为Python变量,这样MATLAB数组可以在Python和MATLAB之间传递。[大谦MATLAB,dqmatlab点com]

在Python中创建MATLAB数组

通过调用MATLAB Python包中的构造函数(例如matlab.double, matlab.int32),可以在Python中创建MATLAB数值数组。构造函数的名称暗示了MATLAB的数值类型,如表1-6所示。

表1-6 MATLAB数组构造函数

MATLAB类 在Python调用的构造函数
matlab.double matlab.double(initializer=None, size=None, is_complex=False)
matlab.single matlab.single(initializer=None, size=None, is_complex=False)
matlab.int8 matlab.int8(initializer=None, size=None, is_complex=False)
matlab.int16 matlab.int16(initializer=None, size=None, is_complex=False)
matlab.int32 matlab.int32(initializer=None, size=None, is_complex=False)
matlab.int64 matlab.int64(initializer=None, size=None, is_complex=False)
matlab.uint8 matlab.uint8(initializer=None, size=None, is_complex=False)
matlab.uint16 matlab.uint16(initializer=None, size=None, is_complex=False)
matlab.uint32 matlab.uint32(initializer=None, size=None, is_complex=False)
matlab.uint64 matlab.uint64(initializer=None, size=None, is_complex=False
matlab.logical matlab.logical(initializer=None, size=None)
matlab.object 无构造函数

创建一个有N个元素的数组时,其大小是1*N,因为它是一个MATLAB数组。

code.python
>>> import matlab.engine
>>> A=matlab.int8([1,2,3,4,5])
>>> print(A.size)
(1, 5)

生成一个包含5个数的Python列表。

在Python中的多维MATLAB数组

在Python中,可以创建任意数值类型的MATLAB数组。下面使用两个Python 列表变量创建一个2*5的double型MATLAB数组。

code.python
>>> import matlab.engine
>>> A=matlab.double([[1,2,3,4,5], [6,7,8,9,10]])
>>> print(A)
[[1.0,2.0,3.0,4.0,5.0],[1.0,7.0,8.0,9.0,10.0]]

A的size属性显示它是一个2*5的数组。

code.python
>>> print(A.size)
 (2, 5)

在Python中索引MATLAB数组

可以索引MATLAB数组,就像索引Python的列表和元组变量一样。

code.python
>>> import matlab.engine
>>> A=matlab.int8([1,2,3,4,5])
>>> print(A[0])
[1,2,3,4,5]

MATLAB数组的大小是(1, 5),所以,A[0]是[1,2,3,4,5]。下面通过索引获取元素3。

code.python
>>> print(A[0][2])
3

Python的索引号是以0为基数的。

code.python
>>> A=matlab.double([[1,2,3,4,5], [6,7,8,9,10]])
>>> print(A[1][2])
8.0

在Python中切片MATLAB数组

可以象在Python中对列表和元组切片一样,对MATLAB数组进行切片。

code.python
>>> import matlab.engine
>>> A=matlab.int8([1,2,3,4,5])
>>> print(A[0][1:4])
[2,3,4]

也可以将数据赋给一个切片。下面的代码演示将一个Python 列表赋给一个数组切片。

code.python
>>> A=matlab.double([[1,2,3,4],[5,6,7,8]]);
>>> A[0]=[10,20,30,40]
>>> print(A)
[[10.0,20.0,30.0,40.0],[5.0,1.0,7.0,8.0]]

也可以用另一个MATLAB数组进行赋值。下面指定切片进行赋值。

code.python
>>> A=matlab.int8([1,2,3,4,5,6,7,8]);
>>> A[0][2:4]=[30,40]
>>> A[0][6:8]=[70,80]
>>> print(A)
[[1,2,30,40,5,6,70,80]]

在Python中重塑MATLAB数组

可以在Python中用reshape方法重塑MATLAB数组。该方法的参数size必须是一个数列,保存元素的个数。下面用reshape函数将一个1*9的MATLAB数组重塑为3*3的。

code.python
>>> import matlab.engine
>>> A=matlab.int8([1,2,3,4,5,6,7,8,9])
>>> A.reshape((3,3))
>>> print(A)
[[1,4,7],[2,5,8],[3,6,9]]