Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

MATLABPython 的数据类型映射

当调用 Python® 函数时,MATLAB® 将 MATLAB 数据转换为最适合在 Python 语言中表达该数据的类型。

将标量值传递给 Python

MATLAB 输入参数类型 -
仅标量值

生成的 Python py. 类型

示例

double
single

float

在 MATLAB 中使用 Python 数值变量

复数 single
复数 double

complex

z = complex(1,2);
py.cmath.polar(z)
ans = 
  Python tuple with no properties.

    (2.23606797749979, 1.1071487177940904)

int8
uint8
int16
uint16
int32

int

 

uint32
int64
uint64

int
long(仅限 2.7 版本)

 

NaN

float("nan")

 

Inf

float("inf")

 

string 标量
char 向量

str

在 MATLAB 中使用 Python str 变量

string 中的 <missing>

None

py.list({string(missing),'Value'})
ans = 
  Python list with no properties.

    [None, 'Value']

logical

bool

 

结构体

dict

在 MATLAB 中使用 Python dict 变量

Python 对象 - py.type

type

 

函数句柄 @py.module.function(仅限于指向 Python 函数的函数句柄)

module.function

Pass Python Function to Python map Function

将向量传递给 Python

MATLAB 输入参数类型 -
1 ×N 向量

生成的 Python 类型

double

array.array('d')

single

array.array('f')

int8

array.array('b')

uint8

array.array('B')

int16

array.array('h')

uint16

array.array('H')

int32

array.array('i')

uint32

array.array('I')

int64(不支持 Windows® 上的 Python 2.7)

array.array('q')

uint64(不支持 Windows 上的 Python 2.7)

array.array('Q')

logical

memoryview

char 向量
string 标量

str

包含大于 127 的值的 char 数组(仅限版本 2.7)

unicode

cell 向量

tuple

将矩阵和多维数组传递给 Python

当您将实数数组或逻辑数组传递给 Python 函数时,MATLAB 会自动将数据转换为 Python memoryview 对象。如果 Python 函数的输出实现了 Python 缓冲区协议并且是实数或逻辑值,MATLAB 将显示:

  • 实际的 Python 类型

  • 底层数据

  • 对应的 MATLAB 转换函数。使用此函数可将 Python 对象完全转换为 MATLAB 数组。

例如,假设您在模块 pyModule 中调用 Python 函数,该函数返回类型为 pyType 的变量并具有以下值:

p = 
  Python pyType:

     8     1     6
     3     5     7
     4     9     2

    Use details function to view the properties of the Python object.

    Use double function to convert to a MATLAB array.

要将 p 转换为 MATLAB 矩阵 P,请键入:

P = double(p)
P = 3×3    
     8     1     6
     3     5     7
     4     9     2

如果需要 p 的 Python 属性的特定信息,请键入:

details(p)
  py.pyModule.pyType handle with properties:

           T: [1×1 py.pyModule.pyType]
        base: [1×1 py.NoneType]
      ctypes: [1×1 py.pyModule.core._internal._ctypes]
        data: [1×3 py.memoryview]
       dtype: [1×1 py.pyModule.dtype]
       flags: [1×1 py.pyModule.flagsobj]
        flat: [1×1 py.pyModule.flatiter]
        imag: [1×1 py.pyModule.pyType]
    itemsize: [1×1 py.int]
      nbytes: [1×1 py.int]
        ndim: [1×1 py.int]
        real: [1×1 py.pyModule.pyType]
       shape: [1×2 py.tuple]
        size: [1×1 py.int]
     strides: [1×2 py.tuple]

  Methods, Events, Superclasses

如果 Python 模块在其 __doc__ 特性中提供内容,MATLAB 将链接到该信息。

使用 Python memoryview 对象允许 Python 读取 MATLAB 数据,而无需制作 MATLAB 数据副本。有关 memoryview 对象和缓冲区协议的信息,请在 https://www.python.org/doc/ 网站上搜索这些术语。

Python 不支持 MATLAB 复数数组和稀疏数组。请参阅不支持的 MATLAB 类型

参数错误故障排除

如果 Python 函数需要特定的 Python 多维数组类型,MATLAB 将显示消息,并提示应该如何继续。如果问题产生的原因有可能是将矩阵或多维数组作为参数传递,请执行以下操作。

  1. 查阅 Python 函数的文档,找出参数需要的类型。

  2. 在 MATLAB 中创建该类型的 Python 对象,并将其传递给 Python 函数。

例如,假设以下代码返回错误。

a = [1 2; 3 4];
py.pyfunc(a)

如果 pyfunc 的文档指定需要的类型为 pyType,请尝试进行以下转换:

py.pyfunc(pyType(a))

如果错误仍然存在,请通过查看 Python 异常中的其他信息来确定根本原因。

自动将 Python 类型转换为 MATLAB 类型

MATLAB 自动将从 Python 返回的下列数据类型转换为 MATLAB 类型。要转换其他类型,请参阅将 Python 类型显式转换为 MATLAB 类型

Python 返回类型,如 Python 中所显示

生成的 MATLAB 类型 - 标量

float

double

complex

复数 double

int(仅限版本 2.7)。

对于 Python 版本 3.x int,您必须显式转换。请参阅 将 Python 类型显式转换为 MATLAB 类型

int64

bool

logical

所有其他 Python 类型 - type

Python 对象 - py.type

Python 类型显式转换为 MATLAB 类型

使用下列 MATLAB 函数将 Python 数据类型转换为 MATLAB 类型。

Python 返回类型或协议,如在 MATLAB 中所显示

MATLAB 转换函数

示例

py.str(版本 3.x)

string
char

在 MATLAB 中使用 Python str 变量

py.str(版本 2.7)

string
char
uint8

 

py.unicode

string
char

 

使用 __str__ 方法的对象

char

py.help('datetime.date.__str__')
Help on wrapper_descriptor in datetime.date:

datetime.date.__str__ = __str__(self, /)
    Return str(self).
d = py.datetime.date(...
    int32(2020),int32(3),int32(4));
char(d)
ans = '2020-3-04'

py.bytes

uint8

 

py.int

double

int64

 

py.long

double

int64

 

py.array.array

您可以将任何格式的 py.array.array 转换为所需的 MATLAB 类型。

numeric
double
single
int8
uint8
int16
uint16
int32
uint32
int64
uint64

在 MATLAB 中使用 Python 数值变量,例如,在 MATLAB 中使用 Python 整数数组类型。

序列协议;例如,py.listpy.tuple

cell

在 MATLAB 中使用 Python list 变量
在 MATLAB 中使用 Python tuple 变量

映射协议;例如,py.dict

struct

在 MATLAB 中使用 Python dict 变量

不支持的 MATLAB 类型

Python 不支持下列 MATLAB 类型。

  • 多维 charcell 数组

  • 结构体数组

  • 复数、整数标量或数组

  • 稀疏数组

  • categorical
    table
    containers.Map
    datetime 类型

  • MATLAB 对象

  • meta.class (py.class)

相关主题