MATLAB 数组作为 Python 变量

目录

在 Python 中创建 MATLAB 数组

Python 中的 MATLAB 数组属性和方法

Python 中的多维 MATLAB 数组

在 Python 中对 MATLAB 数组进行索引

在 Python 中对 MATLAB 数组进行切片

在 Python 中重构 MATLAB 数组


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

在 Python 中创建 MATLAB 数组

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

        可以在 Python 中使用自定义类型初始化 MATLAB 双精度数组。要使用该自定义类型进行初始化,它必须继承自 Python 抽象基类 collections.Sequence。

        可以将 MATLAB 数组作为输入参数传递给由用于 Python 的 MATLAB 引擎 API 调用的函数。当 MATLAB 函数将数值数组作为输出参数返回时,引擎会将该数组返回到 Python。

        可以使用包含数字的可选 initializer 输入参数初始化数组。initializer 必须是 Python 序列类型,例如 list、tuple 或其他序列类型。可选的 size 输入参数根据序列来设置数组大小。

        可以通过指定 initializer 包含多个数字序列或通过指定 size 为多维来创建多维数组。通过将可选的 is_complex 输入参数设置为 True,可以创建复数 MATLAB 数组。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(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[a]

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

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

matlab.logical

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

matlab.object

没有构造函数。当函数返回的是 MATLAB 对象的句柄或值对象时,引擎会将 matlab.object 返回给 Python。

[a] In Python 2.7 on Windows, matlab.int64 is converted to int32 in MATLAB. Also, MATLAB cannot return an int64 array to Python.

[b] In Python 2.7 on Windows, matlab.uint64 is converted to uint32 in MATLAB. Also, MATLAB cannot return a uint64 array to Python.

[c] Logicals cannot be made into an array of complex numbers.

        当创建具有 N 个元素的数组时,数组大小为 1×N,因为它是 MATLAB 数组。

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


(1, 5)

        使用包含五个数字的 Python list 进行初始化。MATLAB 数组大小为 1×5,由 tuple (1,5) 指示。

Python 中的 MATLAB 数组属性和方法

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

属性或方法

用途

size

数组大小返回为 tuple

reshape(size)

按照序列 size 的指定重构数组

Python 中的多维 MATLAB 数组

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

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],[6.0,7.0,8.0,9.0,10.0]]

        A 的 size 属性显示它是 2×5 数组。

print(A.size)


(2, 5)

在 Python 中对 MATLAB 数组进行索引

        就像可以对 Python list 和 tuple 变量进行索引一样,也可以对 MATLAB 数组进行索引。

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。

print(A[0][2])


3

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

        对多维 MATLAB 数组进行索引。

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


8.0

在 Python 中对 MATLAB 数组进行切片

        可以像对 Python list 和 tuple 变量进行切片一样,对 MATLAB 数组进行切片。

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


[2,3,4]

        可以将数据分配到一个切片。以下代码显示从 Python list 到一个数组切片的分配。

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)


[[1,2,30,40,5,6,70,80]]

注意:

        对 MATLAB 数组进行切片与对 Python list 进行切片在行为上有所不同。对 MATLAB 数组进行切片将返回视图而不是浅拷贝。

        假定 MATLAB 数组和 Python list 具有相同的值,分配切片也会产生不同结果,如以下代码所示。

A = matlab.int32([[1,2],[3,4],[5,6]])
L = [[1,2],[3,4],[5,6]]
A[0] = A[0][::-1]
L[0] = L[0][::-1]
print(A)


[[2,2],[3,4],[5,6]]


print(L)


[[2, 1], [3, 4], [5, 6]]

在 Python 中重构 MATLAB 数组

        可以使用 reshape 方法在 Python 中重构 MATLAB 数组。输入参数 size 必须是保留元素数量的一个序列。使用 reshape 将 1×9 MATLAB 数组更改为 3×3。

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值