CANN AsNumpy基本用法指南
基本用法【免费下载链接】asnumpy-docs项目地址: https://gitcode.com/cann/asnumpy-docs本指南涵盖 AsNumpy 的核心概念ndarray对象当前设备数据传输数组创建数学运算内存管理ndarray对象asnumpy.ndarray类是 AsNumpy 的核心。它与numpy.ndarray兼容同时将数据存储在 NPU 上。基本用法import numpy as np import asnumpy as ap # 在 CPU 上创建 NumPy 数组 x_cpu np.array([1, 2, 3], dtypenp.float32) # 传输到 NPU x_npu ap.ndarray.from_numpy(x_cpu) # x_npu 现在是当前设备上的 asnumpy.ndarray print(type(x_npu)) # class asnumpy.ndarray属性与 NumPy 数组一样ndarray对象具有标准属性 x ap.ndarray.from_numpy(np.array([[1, 2], [3, 4]], dtypenp.float32)) x.shape (2, 2) x.dtype dtype(float32)注意ndim和size等属性可以从shape派生 len(x.shape) # ndim 2 import numpy as np int(np.prod(x.shape)) # size 4当前设备AsNumpy 有一个当前设备的概念 — 这是数组分配和操作发生的默认 NPU。切换设备import asnumpy as ap # 默认设备是 0 ap.set_device(0) # 切换到设备 1 ap.set_device(1) # 在设备 1 上创建数组 x ap.ndarray.from_numpy(np.array([1, 2, 3])) # 切换回设备 0 ap.set_device(0)注意要检查可用的 NPU 设备请使用系统命令npu-smi info自动初始化AsNumpy 在导入时自动初始化 NPU 设备在程序退出时自动释放import asnumpy as ap # NPU 自动初始化 # 您的代码... # 程序退出时 NPU 自动释放无需手动初始化或终结。数据传输CPU 到 NPU使用ap.ndarray.from_numpy()将数据从 CPU 传输到 NPUimport numpy as np import asnumpy as ap # 在 CPU 上创建数据 cpu_data np.random.randn(1000, 1000).astype(np.float32) # 传输到 NPU npu_data ap.ndarray.from_numpy(cpu_data)NPU 到 CPU使用.to_numpy()将数据从 NPU 传回 CPU# 传回 CPU result_cpu npu_data.to_numpy() print(type(result_cpu)) # class numpy.ndarray传输流程┌──────────────┐ from_numpy() ┌──────────────┐ │ NumPy │ ─────────────────► │ AsNumpy │ │ ndarray │ │ ndarray │ │ (CPU) │ ◄───────────────── │ (NPU) │ └──────────────┘ to_numpy() └──────────────┘数组创建从 NumPy 数组创建import numpy as np import asnumpy as ap # 从现有 NumPy 数组 np_arr np.array([1, 2, 3, 4, 5], dtypenp.float32) ap_arr ap.ndarray.from_numpy(np_arr)使用创建函数AsNumpy 提供与 NumPy 兼容的数组创建函数import asnumpy as ap # 直接在 NPU 上创建数组 zeros ap.zeros((3, 4), dtypeap.float32) ones ap.ones((3, 4), dtypeap.float32) full ap.full((3, 4), fill_value5.0, dtypeap.float32)数学运算AsNumpy 支持广泛的数学运算API 与 NumPy 相同。算术运算import asnumpy as ap import numpy as np a ap.ndarray.from_numpy(np.array([1, 2, 3], dtypenp.float32)) b ap.ndarray.from_numpy(np.array([4, 5, 6], dtypenp.float32)) # 逐元素运算 c ap.add(a, b) # [5, 7, 9] d ap.subtract(a, b) # [-3, -3, -3] e ap.multiply(a, b) # [4, 10, 18] f ap.divide(a, b) # [0.25, 0.4, 0.5]三角函数import asnumpy as ap import numpy as np x ap.ndarray.from_numpy(np.array([0, np.pi/2, np.pi], dtypenp.float32)) sin_x ap.sin(x) cos_x ap.cos(x) tan_x ap.tan(x)指数和对数import asnumpy as ap import numpy as np x ap.ndarray.from_numpy(np.array([1, 2, 3], dtypenp.float32)) exp_x ap.exp(x) # e^x log_x ap.log(x) # 自然对数 log10_x ap.log10(x) # 以 10 为底的对数规约操作import asnumpy as ap import numpy as np arr ap.ndarray.from_numpy(np.array([[1, 2], [3, 4]], dtypenp.float32)) total ap.sum(arr) # 10.0 mean_val ap.mean(arr) # 2.5 max_val ap.max(arr) # 4.0 min_val ap.min(arr) # 1.0线性代数import asnumpy as ap import numpy as np a ap.ndarray.from_numpy(np.array([[1, 2], [3, 4]], dtypenp.float32)) b ap.ndarray.from_numpy(np.array([[5, 6], [7, 8]], dtypenp.float32)) # 矩阵乘法 c ap.matmul(a, b) # 矩阵范数 norm ap.linalg.norm(a)内存管理AsNumpy 使用 RAII资源获取即初始化进行自动内存管理自动清理import asnumpy as ap def compute(): # 在 NPU 上分配数组 arr ap.ones((1000, 1000), dtypeap.float32) result ap.sum(arr) return result.to_numpy() # arr 在离开作用域时自动释放 # 没有内存泄漏 for _ in range(1000): compute()关键点无需手动释放设备内存自动释放RAII资源与对象生命周期绑定异常安全即使发生异常内存也会被释放性能考虑数组大小很重要NPU 加速对大数组最有效数组形状建议 1000×1000考虑使用 NumPyCPU 可能更快≥ 1000×1000使用 AsNumpy 以获得最佳性能≥ 2000×2000预期有显著加速最小化数据传输# ❌ 不好频繁传输 for i in range(1000): arr ap.ndarray.from_numpy(np_array) # 每次迭代都传输 result ap.sum(arr) cpu_result result.to_numpy() # 每次迭代都传回 # ✅ 好传输一次计算多次 arr ap.ndarray.from_numpy(np_array) # 传输一次 for i in range(1000): result ap.sum(arr) cpu_result result.to_numpy() # 最后传输一次【免费下载链接】asnumpy-docs项目地址: https://gitcode.com/cann/asnumpy-docs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考