主要内容

MATLAB数组作为Python变量

matlabPython®模块提供了MATLAB的数组类来表示数组®MATLAB数值类型Python变量,数组可以在Python和MATLAB之间传递。

MATLAB类的matlab.enginePython模块

  • 您可以使用MATLAB数值数组的Python代码导入matlab.enginePython包和必要调用构造函数。例如:

    导入matlab。= matlab引擎。双([[1,2,3],[4、5、6]])
    构造函数的名称表明MATLAB数值类型。您可以将MATLAB数组作为输入参数传递给从Python调用MATLAB函数。当一个MATLAB函数返回一个数值数组作为输出参数,数组返回给Python。

  • 你可以使用一个可选的初始化一个数组初始化器包含数字的输入参数。的初始化器参数必须是一个Python序列类型等列表,元组,或范围。您可以指定初始化器包含多个序列的数字。

  • 你可以使用一个可选的初始化一个数组向量输入参数包含输入大小1)×(n。如果你使用向量,你不能使用初始化器

  • 您可以创建一个多维数组使用下列选项之一:

    • 指定一个嵌套的序列没有指定大小。

    • 指定一个嵌套的同时指定一个序列大小输入参数匹配嵌套的尺寸序列。

    • 指定一个一维序列与一个多维的大小。在这种情况下,将假定为代表的元素序列列为主的秩序。

  • 您可以创建一个MATLAB的复数通过设置可选的is_complex关键字参数真正的

  • 您可以使用定制类型对MATLAB在Python中数组进行初始化。自定义类型应该执行Python缓冲协议。一个例子是ndarray在NumPy。

matlabPython包

构造函数调用在Python中

例子

matlab.double

matlab.double(initializer=None|vector=None, size=None, is_complex=False)
> > > = matlab.double (4)
> > > b = matlab。双(向量=[33]11日22日)
> > > c = matlab。双([[10 20],[30 40]])
> > > d = matlab。双(初始值设定项=[(10、20),[30 40]],大小= (2,2)is_complex = False)
> > > e = matlab。双(向量=范围(0,20))
> > > f = matlab。双(向量= [x * x x范围(0 10 2)))
> > > g = matlab.double ([[1.1 + 2.4 j, 3 + 4 j], [5.3, 6.7]], is_complex = True)

matlab.single

matlab.single(initializer=None|vector=None, size=None, is_complex=False)
> > > = matlab.single ([(1.1, 2.2, 3.3), (4.4, 5.5, 6.6)))
> > > = matlab。单(向量=[33]11日,22日,is_complex = False)

matlab.int8

matlab.int8(初始值设定项= = |向量没有问题,大小= None, is_complex = False)
> > > = matlab.int8([[11, 22岁,33],[44岁,55岁,66]])
> > > = matlab.int8(向量=[33]11日,22日,is_complex = False)

matlab.int16

matlab.int16(初始值设定项= = |向量没有问题,大小= None, is_complex = False)
> > > e = matlab.int16 ([[1 + 2 j, 3 + 4 j], [5, 6]], is_complex = True)

matlab.int32

matlab.int32(初始值设定项= = |向量没有问题,大小= None, is_complex = False)
> > > = matlab.int32(初始值设定项=[[11,22岁,33],[44、-55、66]],大小= [2、3],is_complex = False)

matlab.int64

matlab.int64(初始值设定项= = |向量没有问题,大小= None, is_complex = False)
> > > = matlab.int64([[11, 22岁,33],[44、-55、66]])

matlab.uint8

matlab.uint8(initializer=None|vector=None, size=None, is_complex=False)
> > > = matlab。uint8([[11, 22岁,33],[44岁,55岁,66]])
> > > b = matlab。uint8(向量=[33]11日,22日,is_complex = False)

matlab.uint16

matlab.uint16(initializer=None|vector=None, size=None, is_complex=False)
> > > = matlab。uint16(初始值设定项=[[33]11日,22日,[44岁,55岁,66]],大小= [2、3],is_complex = False)
> > > b = matlab。uint16(向量=[33]11日,22日,is_complex = False)
> > > c = matlab。uint16([[11, 22岁,33],[44岁,55岁,66]])

matlab.uint32

matlab.uint32(initializer=None|vector=None, size=None, is_complex=False)
> > > = matlab。uint32(向量=[33]11日,22日,is_complex = False)
> > > b = matlab。uint32([[11, 22岁,33],[44岁,55岁,66]])

matlab.uint64

matlab.uint64(initializer=None|vector=None, size=None, is_complex=False)
> > > = matlab。uint64([[11, 22岁,33],[44岁,55岁,66]])
> > > b = matlab。uint64(向量=[33]11日,22日,is_complex = False)

matlab.logical

matlab.logical(initializer=None|vector=None, size=None)一个
> > > = matlab。逻辑(初始值设定项=[[真,假,真],[真的,真的,真的]],大小= [2、3])
> > > b = matlab。逻辑([[真,假,真],[真的,真的,真的]])
> > > c = matlab。逻辑(向量=[真,假,真])
> > > d = matlab。逻辑((真的,假,真的))

一个逻辑值不能做成一个复数数组。

的属性和方法MATLAB类的matlabPython

创建的所有MATLAB数组matlab.engine包的构造函数有以下属性和方法:

属性

属性名 描述 例子

大小

一个元组的整数代表一个数组的维度

> > > = matlab.int16 ([[1, 2, 3], [4、5、6]]) > > >。大小(2、3)

itemsize

一个整数代表大小字节的数组的一个元素

> > > = matlab.int16 () > > >。itemsize2 >>> b = matlab.int32() >>> b.itemsize 4

方法

方法名称 目的 例子
克隆()

返回一个新的不同的对象与内容相同的原始对象的内容

> > > = matlab.int16 ([[1, 2, 3], [4、5、6]]) > > > b = a.clone() > > >打印(b) [[1, 2, 3], [4、5、6]] > > > b [0] [0] = 100 > > > b matlab.int16([[100, 2, 3],[4、5、6]]) > > >打印(a) [[1, 2, 3], [4、5、6]]
真正的()

返回元素的真正部分复数,列为主的顺序,1)×(n数组

> > > = matlab.int16 ([[1 + 10 j 2 + 20 j, 3 + 30 j], [4、5、6]], is_complex = True) > > >打印(a.real ()) (1、4、2、5、3、6)
图像放大()

返回元素复数的虚部,在列为主的顺序,1)×(n数组

> > > = matlab.int16 ([[1 + 10 j 2 + 20 j, 3 + 30 j], [4、5、6]], is_complex = True) > > >打印(a.imag())[0 10 0, 20日,30日0]
并且没有()

返回的元素不是复数,列为主的顺序,1)×(n数组

> > > = matlab.int16([[1, 2, 3],[4、5、6]]) > > >打印(a.noncomplex ()) (1、4、2、5、3、6)
  • 重塑(dim1,dim2、……dimN)

  • 重塑((dim1,dim2、……dimN))

  • 重塑([dim1,dim2、……dimN])

根据尺寸和重塑数组返回结果

> > > = matlab.int16([[1, 2, 3],[4、5、6]]) > > >打印(a) [[1, 2, 3], [4、5、6]] > > >。重塑(2)> > >打印(a) [[1,5], [4 3], [2,6]]
toarray ()

返回一个标准Pythonarray.array对象构建的内容。只适用于一维序列。

> > > = matlab.int16 ([[1, 2, 3], [4、5、6]]) > > > [0] .toarray()数组(“h”, [1, 2, 3]) > > > b = matlab.int16 ([[1 + 10 j 2 + 20 j, 3 + 30 j], [4、5、6]], is_complex = True) > > > b.real () .toarray()数组(“h”, [1、4、2、5、3、6])
tomemoryview ()

返回一个标准Pythonmemoryview对象构建的内容

> > > = matlab.int16 ([[1, 2, 3], [4、5、6]]) > > > b = a.tomemoryview () > > > b.tolist () [[1, 2, 3], [4、5、6]] > > > b。形状(2、3)

多维MATLAB中的数组Python

在Python中,您可以创建多维数组MATLAB的数值类型。Python使用两个列表变量创建一个2-by-5 MATLAB双打的数组。

导入matlab。= matlab引擎。双([[1、2、3、4、5],[6 7 8 9 10]])打印(A)
[[1.0,2.0,3.0,4.0,5.0),(6.0,7.0,8.0,9.0,10.0)]

大小的属性一个表明它是一个2-by-5数组。

打印(A.size)
(2、5)

索引MATLAB中的数组Python

可以索引到MATLAB数组一样可以索引到Python列表元组变量。

导入matlab。引擎= matlab.int8([1、2、3、4、5])打印([0])
(1、2、3、4、5)

MATLAB数组的大小(1、5);因此,一个[0](1、2、3、4、5)。索引数组得到3。

打印([0][2])
3

Python是从零开始的索引。当你访问元素的MATLAB Python会话中的数组,使用从零开始的索引。

指数为MATLAB多维数组。

一个= matlab。双([[1、2、3、4、5],[6 7 8 9 10]])打印([1][2])
8.0

MATLAB中的数组Python

你可以切MATLAB数组相同的方式把Python列表元组变量。

导入matlab。引擎= matlab.int8([[1、2、3、4、5]])打印([0][1:4])
(2、3、4)

您可以将数据分配给一片。这个代码显示了一个Python任务列表一个数组的一片。

A = matlab.double ([[1、2、3、4], [5、6、7、8]]);[0]=[10年,20年,30、40]打印(A)
[(10.0,20.0,30.0,40.0),(5.0,6.0,7.0,8.0)]

你可以从另一个MATLAB数组分配数据,或从任何Python iterable包含数字。

您可以指定片分配如下所示。

A = matlab.int8 ([1, 2, 3, 4, 5, 6, 7, 8));[0][2:4]=[30 40][0][6:8]=(70、80)打印(A)
40[[1、2、30日,5日,6日,70年,80]]

重塑MATLAB中的数组Python

你可以重塑一个MATLAB数组在Python重塑方法。输入参数大小必须是一个序列,保存元素的数量。使用重塑改变一个1-by-9 MATLAB 3 x3的数组。

导入matlab。引擎= matlab.int8 ([1, 2, 3, 4, 5, 6, 7, 8, 9]) A.reshape((3,3))打印(A)
[[1、4、7],[2、5、8],[3、6、9]]

相关的话题