nndeploy.device.tensor 源代码

import nndeploy._nndeploy_internal as _C

import numpy as np

import nndeploy.base
from .device import Device
from .type import BufferDesc, TensorDesc
from .memory_pool import MemoryPool
from .buffer import Buffer

# 从numpy array返回一个Tensor
[文档]def create_tensor_from_numpy(np_data, device="cpu"): device_type = nndeploy.base.DeviceType(device) c_tensor = _C.device.Tensor.from_numpy(np_data, device_type) tensor = Tensor(c_tensor) return tensor
# 从Tensor返回一个numpy array
[文档]def create_numpy_from_tensor(tensor): # return np.array(tensor.to(nndeploy.base.name_to_device_type_code["cpu"])) return np.array(tensor.to(nndeploy.base.DeviceType("cpu")))
[文档]class Tensor(_C.device.Tensor):
[文档] def __init__(self, *args, **kwargs): """ Tensor构造函数。 Args: name (str, optional): Tensor的名称。 desc (TensorDesc, optional): Tensor的描述信息,包含数据类型、形状等。 buffer (Buffer, optional): 已存在的Buffer对象,用于直接构造Tensor。 device (Device, optional): 设备对象,指定Tensor所在的设备。 data_ptr (void*, optional): 外部数据指针,用于直接使用已有内存构造Tensor。 memory_pool (MemoryPool, optional): 内存池对象,用于从内存池中分配内存。 config (List[int], optional): 配置参数,用于指定内存对齐等配置。 *args: 其他位置参数。 **kwargs: 其他关键字参数。 Note: 构造函数有以下几种形式: 1. Tensor(name) - 仅指定名称创建空Tensor 2. Tensor(desc, name="") - 使用TensorDesc创建Tensor 3. Tensor(desc, buffer, name="") - 使用已有Buffer创建Tensor 4. Tensor(device, desc, name="", config=[]) - 在指定设备上创建Tensor 5. Tensor(device, desc, data_ptr, name="", config=[]) - 使用已有内存在设备上创建Tensor 6. Tensor(memory_pool, desc, name="", config=[]) - 从内存池创建Tensor 7. Tensor(memory_pool, desc, data_ptr, name="", config=[]) - 使用已有内存从内存池创建Tensor Notes: - 如果第一个参数是Device对象,它将被转换为_C.device.Device对象。 - 如果第一个参数是MemoryPool对象,它将被转换为_C.device.MemoryPool对象。 """ # 将Device转换为_C.device.Device if len(args) > 1 and isinstance(args[0], Device): args = (args[0]._device,) + args[1:] # 将MemoryPool转换为_C.device.MemoryPool elif len(args) > 1 and isinstance(args[0], MemoryPool): args = (args[0]._memory_pool,) + args[1:] super().__init__(*args, **kwargs)
[文档] def create(self, *args, **kwargs): """ 创建Tensor。 Args: *args: 传递给父类create函数的位置参数。 **kwargs: 传递给父类create函数的关键字参数。 Returns: None """ return super().create(*args, **kwargs)
[文档] def clear(self): """ 清空Tensor。 Returns: None """ return super().clear()
[文档] def allocate(self, *args, **kwargs): """ 分配Tensor内存。 Args: *args: 传递给父类allocate函数的位置参数。 **kwargs: 传递给父类allocate函数的关键字参数。 Returns: None """ return super().allocate(*args, **kwargs)
[文档] def deallocate(self): """ 释放Tensor内存。 Returns: None """ return super().deallocate()
[文档] def set(self, value): """ 设置Tensor的值。 Args: value: 要设置的值。 Returns: None """ return super().set(value)
[文档] def reshape(self, shape): """ 重塑Tensor的形状。 Args: shape (tuple): 新的Tensor形状。 Returns: None """ return super().reshape(shape)
[文档] def just_modify(self, desc=None, buffer=None, is_external=True): """ 修改Tensor描述符或缓冲区。 Args: desc (TensorDesc, optional): 新的Tensor描述符。默认为None。 buffer (Buffer, optional): 新的缓冲区。默认为None。 is_external (bool, optional): 缓冲区是否为外部的。默认为True。 Returns: None Raises: ValueError: 如果desc和buffer都没有提供。 """ if desc is not None: return super().just_modify(desc) elif buffer is not None: return super().just_modify(buffer, is_external) else: raise ValueError("必须提供desc或buffer。")
[文档] def clone(self): """ 克隆Tensor。 Returns: Tensor: 克隆的Tensor。 """ return super().clone()
[文档] def copy_to(self, dst): """ 将Tensor复制到目标Tensor。 Args: dst (Tensor): 目标Tensor。 Returns: None """ return super().copy_to(dst)
[文档] def serialize(self, bin_str: str): """ 序列化Tensor到流。 Args: stream: 输出流。 Returns: None """ return super().serialize(bin_str)
[文档] def deserialize(self, bin_str: str): """ 从流反序列化Tensor。 Args: stream: 输入流。 Returns: None """ return super().deserialize(bin_str)
[文档] def print(self, stream=None): """ 打印Tensor信息。 Args: stream: 输出流。默认为None。 Returns: None """ return super().print(stream)
[文档] def is_same_device(self, tensor): """ 检查Tensor是否在同一设备上。 Args: tensor (Tensor): 要比较的Tensor。 Returns: bool: 如果Tensor在同一设备上,则为True,否则为False。 """ return super().is_same_device(tensor)
[文档] def is_same_memory_pool(self, tensor): """ 检查Tensor是否在同一内存池中。 Args: tensor (Tensor): 要比较的Tensor。 Returns: bool: 如果Tensor在同一内存池中,则为True,否则为False。 """ return super().is_same_memory_pool(tensor)
[文档] def is_same_desc(self, tensor): """ 检查Tensor是否具有相同的描述符。 Args: tensor (Tensor): 要比较的Tensor。 Returns: bool: 如果Tensor具有相同的描述符,则为True,否则为False。 """ return super().is_same_desc(tensor)
[文档] def empty(self): """ 检查Tensor是否为空。 Returns: bool: 如果Tensor为空,则为True,否则为False。 """ return super().empty()
[文档] def is_continue(self): """ 检查Tensor数据是否连续。 Returns: bool: 如果Tensor数据连续,则为True,否则为False。 """ return super().is_continue()
[文档] def is_external_buffer(self): """ 检查Tensor缓冲区是否为外部的。 Returns: bool: 如果Tensor缓冲区为外部的,则为True,否则为False。 """ return super().is_external_buffer()
[文档] def get_name(self): """ 获取Tensor名称。 Returns: str: Tensor名称。 """ return super().get_name()
[文档] def set_name(self, name): """ 设置Tensor名称。 Args: name (str): 新的Tensor名称。 Returns: None """ return super().set_name(name)
[文档] def get_desc(self): """ 获取Tensor描述符。 Returns: TensorDesc: Tensor描述符。 """ return super().get_desc()
[文档] def get_data_type(self): """ 获取Tensor数据类型。 Returns: DataType: Tensor数据类型。 """ return super().get_data_type()
[文档] def set_data_type(self, data_type): """ 设置Tensor数据类型。 Args: data_type (DataType): 新的Tensor数据类型。 Returns: None """ return super().set_data_type(data_type)
[文档] def get_data_format(self): """ 获取Tensor数据格式。 Returns: DataFormat: Tensor数据格式。 """ return super().get_data_format()
[文档] def set_data_format(self, data_format): """ 设置Tensor数据格式。 Args: data_format (DataFormat): 新的Tensor数据格式。 Returns: None """ return super().set_data_format(data_format)
[文档] def get_shape(self): """ 获取Tensor形状。 Returns: tuple: Tensor形状。 """ return super().get_shape()
[文档] def get_shape_index(self, index): """ 获取指定索引处的形状值。 Args: index (int): 索引。 Returns: int: 指定索引处的形状值。 """ return super().get_shape_index(index)
[文档] def get_batch(self): """ 获取Tensor批次大小。 Returns: int: Tensor批次大小。 """ return super().get_batch()
[文档] def get_channel(self): """ 获取Tensor通道数。 Returns: int: Tensor通道数。 """ return super().get_channel()
[文档] def get_depth(self): """ 获取Tensor深度。 Returns: int: Tensor深度。 """ return super().get_depth()
[文档] def get_height(self): """ 获取Tensor高度。 Returns: int: Tensor高度。 """ return super().get_height()
[文档] def get_width(self): """ 获取Tensor宽度。 Returns: int: Tensor宽度。 """ return super().get_width()
[文档] def get_stride(self): """ 获取Tensor步长。 Returns: tuple: Tensor步长。 """ return super().get_stride()
[文档] def get_stride_index(self, index): """ 获取指定索引处的步长值。 Args: index (int): 索引。 Returns: int: 指定索引处的步长值。 """ return super().get_stride_index(index)
[文档] def get_buffer(self): """ 获取Tensor缓冲区。 Returns: Buffer: Tensor缓冲区。 """ return super().get_buffer()
[文档] def get_device_type(self): """ 获取Tensor设备类型。 Returns: DeviceType: Tensor设备类型。 """ return super().get_device_type()
[文档] def get_device(self): """ 获取Tensor设备。 Returns: Device: Tensor设备。 """ c_device = super().get_device() return Device(c_device)
[文档] def get_memory_pool(self): """ 获取Tensor内存池。 Returns: MemoryPool: Tensor内存池。 """ c_memory_pool = super().get_memory_pool() return MemoryPool(c_memory_pool)
[文档] def is_memory_pool(self): """ 检查Tensor是否来自内存池。 Returns: bool: 如果Tensor来自内存池,则为True,否则为False。 """ return super().is_memory_pool()
[文档] def get_buffer_desc(self): """ 获取Tensor缓冲区描述符。 Returns: BufferDesc: Tensor缓冲区描述符。 """ return super().get_buffer_desc()
[文档] def get_size(self): """ 获取Tensor大小。 Returns: int: Tensor大小。 """ return super().get_size()
[文档] def get_size_vector(self): """ 获取Tensor大小向量。 Returns: list: Tensor大小向量。 """ return super().get_size_vector()
[文档] def get_real_size(self): """ 获取Tensor实际大小。 Returns: int: Tensor实际大小。 """ return super().get_real_size()
[文档] def get_real_size_vector(self): """ 获取Tensor实际大小向量。 Returns: list: Tensor实际大小向量。 """ return super().get_real_size_vector()
[文档] def get_config(self): """ 获取Tensor配置。 Returns: list: Tensor配置。 """ return super().get_config()
[文档] def get_data(self): """ 获取Tensor数据指针。 Returns: int: Tensor数据指针。 """ return super().get_data()
[文档] def get_memory_type(self): """ 获取Tensor内存类型。 Returns: MemoryType: Tensor内存类型。 """ return super().get_memory_type()
[文档] def add_ref(self): """ 增加Tensor引用计数。 Returns: None """ return super().add_ref()
[文档] def sub_ref(self): """ 减少Tensor引用计数。 Returns: None """ return super().sub_ref()
[文档] def to_numpy(self): """ 将Tensor转换为numpy数组。 Returns: numpy.ndarray: numpy数组。 """ return super().to_numpy()
[文档] def to(self, device_type): """ 将Tensor移动到指定设备。 Args: device_type (DeviceType): 目标设备类型。 Returns: Tensor: 移动后的Tensor。 """ return super().to(device_type)
[文档] @staticmethod def from_numpy(array, device_type=nndeploy.base.DeviceType("cpu")): """ 从numpy数组创建Tensor。 Args: array (numpy.ndarray): numpy数组。 device_type (DeviceType): 目标设备类型。 Returns: Tensor: 创建的Tensor。 """ c_tensor = _C.device.Tensor.from_numpy(array, device_type) return Tensor(c_tensor)