主要内容

MATLAB数组作为Python变量

matlabPython®包提供数组类来表示MATLAB的数组®数值类型作为Python变量,以便MATLAB数组可以在Python和MATLAB之间传递。

创建MATLAB中的数组Python

中调用构造函数,可以在Python会话中创建MATLAB数值数组matlabPython包(例如,matlab.doublematlab.int32).构造函数的名称表示MATLAB数值类型。

可以在Python中使用自定义类型初始化MATLAB双数组。自定义类型应该继承自Python抽象基类集合。序列用作初始化式。

您可以将MATLAB数组作为输入参数传递给使用Python的MATLAB引擎API调用的函数。当MATLAB函数返回一个数字数组作为输出参数时,引擎将该数组返回给Python。

可以使用可选参数初始化数组初始化器包含数字的输入参数。初始化器必须是Python序列类型,例如列表元组,或其他序列类型。可选大小Input参数从序列中设置数组大小。可以通过指定来创建多维数组初始化器包含多个数字序列,或通过指定大小是多维的。您可以通过设置可选选项来创建一个复数的MATLAB数组is_complex输入参数真正的.的matlab包提供了表中列出的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(初始化项=None, size=None, is_complex=False)

matlab.int16

matlab.int16(初始值=None, size=None, is_complex=False)

matlab.int32

matlab.int32(初始化项=None, size=None, is_complex=False)

matlab.int64一个]

matlab.int64(初始化项=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.uint64b]

matlab.uint64(initializer=None, size=None, is_complex=False)

matlab.logical

matlab.logical(initializer=None, size=None)c]

matlab.object

没有构造函数。当函数向MATLAB对象返回句柄或值对象时,引擎返回matlab.objectPython。

一个]在Windows上的Python 2.7中,matlab.int64转换为int32在MATLAB。而且,MATLAB不能返回int64数组转换为Python。

b]在Windows上的Python 2.7中,matlab.uint64转换为uint32在MATLAB。同样,MATLAB不能返回auint64数组转换为Python。

c]逻辑不能被做成复数的数组。

创建数组时N元素,大小为1 × -N因为它是MATLAB数组。

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

初始化式是Python列表包含五个数字。MATLAB数组的大小为1 × 5,由元组(1、5)

MATLAB中的数组属性和方法Python

创建的所有MATLAB数组matlab包构造函数具有表中列出的属性和方法。

属性或方法

目的

大小

返回数组的大小元组

重塑(大小)

按顺序重新塑造数组大小

多维MATLAB中的数组Python

在Python中,可以创建任何数字类型的多维MATLAB数组。使用两个Python列表变量来创建一个2 × 5的MATLAB双精度数组。

导入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), (6.0, 7.0, 8.0, 9.0, 10.0)]

大小的属性一个显示它是一个2 × 5的数组。

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

索引MATLAB中的数组Python

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

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

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

打印([0][2])
3.

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

索引到多维MATLAB数组。

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

MATLAB中的数组Python

你可以像分割Python一样分割MATLAB数组列表元组变量。

导入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]]);A[0] = [10,20,30,40] print(A)
[(10.0, 20.0, 30.0, 40.0), (5.0, 6.0, 7.0, 8.0)]

您可以从另一个MATLAB数组或任何包含数字的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)
40[[1、2、30日,5日,6日,70年,80]]

请注意

对MATLAB数组进行切片与对Python进行切片的行为不同列表.切片MATLAB数组返回一个视图,而不是一个浅拷贝。

给定一个MATLAB数组和一个Python列表使用相同的值,分配切片会产生不同的结果,如下面的代码所示。

= matlab.int32([[1、2],[3,4],[5,6]])L =[[1、2],[3,4],[5,6]]一个[0]= [0][::1)L L[0] =[0][:: 1)打印(A)
[[2 2], [3, 4], [5, 6]]
打印(左)
[[2,1], [3,4], [5,6]]

重塑MATLAB中的数组Python

控件可以在Python中重塑MATLAB数组重塑方法。输入参数大小必须是一个保留元素数量的序列。使用重塑将1 × 9的MATLAB数组变为3 × 3。

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

相关的话题