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]]