首页 > 其他分享 >Numpy之001 Numpy简介

Numpy之001 Numpy简介

时间:2023-12-10 11:23:15浏览次数:30  
标签:arr 简介 001 数组 np array Numpy ndarray

简介

Numpy(Numerical Python)是⼀个开源的Python科学计算库,⽤于快速处理任意维度数组的工具。

Numpy⽀持常⻅的数组和矩阵操作。对于同样的数值计算任务,使⽤Numpy⽐直接使⽤Python要简洁的多,性能好
Numpy使⽤ndarray对象来处理多维数组,该对象是⼀个快速⽽灵活的⼤数据容器。

 

ndarray

ndarray 是 Numpy 中的核心特性之一,它是一个多维数组对象,提供了高效的存储和处理大型数据集的能力

 

1. ndarray 的创建

可以通过多种方法创建 ndarray,例如:

  • 从 Python 列表或元组创建
  • 使用 Numpy 函数如 np.zerosnp.onesnp.arangenp.linspace 等
import numpy as np

# 从列表创建
arr1 = np.array([1, 2, 3])

# 使用 np.zeros 创建
arr2 = np.zeros((3, 4))  # 创建一个 3x4 的零矩阵

2. ndarray 的属性

主要的属性包括:

  • ndarray.shape: 数组的形状
  • ndarray.size: 数组中元素的总数
  • ndarray.dtype: 数组元素的数据类型
  • ndarray.ndim: 数组的维度数

3. 数据类型

ndarray 支持多种数据类型,如 int, float, bool ,str等。合适的数据类型使用可以提高存储和计算效率.

4. 索引和切片

ndarray 支持复杂的索引和切片操作,可以选择数组的特定部分。

5. 形状操作

可以改变数组的形状而不改变其数据,例如使用 reshape 方法。

6. 数学运算

ndarray 支持各种数学运算,包括加减乘除、统计操作、线性代数运算等。

7. 广播

广播是 Numpy 对不同形状数组进行算术运算的能力。

最佳实践

  • 选择合适的数据类型:根据需要选择适当的数据类型以节省内存和提高性能。
  • 避免使用循环:利用 Numpy 的向量化操作,避免使用显式循环。
  • 内存管理:注意数组的复制和视图的区别,以避免不必要的内存使用。
  • 使用广播:理解和利用广播机制可以简化代码并提高效率。

1. 使用 NumPy 的内建函数

NumPy 提供了一系列内建函数来创建数组,这些函数通常比手动输入数据更高效。

  • 使用 np.zeros, np.ones, np.arange, np.linspace 等来创建特定形状和模式的数组。
  • 示例:
import numpy as np

# 创建一个全是零的 3x3 矩阵
zeros = np.zeros((3, 3))

# 创建一个 1 到 10 的数组
range_array = np.arange(1, 11)

 

2. 选择合适的数据类型

  • 选择合适的数据类型可以减少内存占用和提高性能。
  • 示例:
    # 使用参数dtype指定传教创建数组的类型
    float_array = np.array([1, 2, 3], dtype=np.float32)
    print(float_array)  # 有点说明是浮点型
    int_array = np.array([1, 2, 3])
    print(int_array)  # 有点说明是浮点型,否则就是int

     

 

3. 利用向量化操作

  • 尽可能使用向量化操作而不是循环,这样可以利用 NumPy 的内部优化。
  • 示例:
# 使用向量操作,替代for循环
arr = np.array([1, 2, 3, 4, 5])
# 向量化加法
arr_plus_10 = arr + 10
print(arr_plus_10)

 

4. 理解视图(View)和副本(Copy)

  • 修改数组的视图会影响原数组,而副本则不会。
  • 使用 copy() 方法可以创建一个数组的副本。
  • 示例:
arr = np.array([1, 2, 3, 4, 5])
# 创建副本
arr_copy = arr.copy()

5. 使用广播机制

  • 广播是 NumPy 的一种机制,允许对不同形状的数组进行算术运算。
  • 理解广播规则可以帮助你写出更简洁高效的代码。
  • 示例:

 

arr = np.array([1, 2, 3])
# 广播机制
result = arr * 2  # 数组中的每个元素都乘以 2

6. 内存布局的考虑

  • 理解数组的内存布局(例如,行主序或列主序)对于性能至关重要,特别是在处理大型数组时。
  • 使用 np.reshapenp.transpose 等函数时要注意数组的内存布局。

示例代码

import numpy as np

# 创建数组
arr = np.arange(10, dtype=np.float32)

# 向量化操作
arr_squared = arr ** 2

# 利用广播
arr_scaled = arr * 2.5

# 视图和副本
arr_copy = arr.copy()
arr_copy[0] = 100
print(arr[0])  # 原数组不受影响

# 处理大型数组时考虑内存布局
large_arr = np.random.rand(1000, 1000)
transpose_arr = large_arr.T  # 转置操作

 

 

 

 

 

示例

import numpy as np  # 导入numpy

# 从列表创建
arr_from_list = np.array([1, 2, 3, 4, 5])
print(type(arr_from_list))
print(arr_from_list)

# 从元组创建
arr_from_tuple = np.array((6, 7, 8, 9, 10))
print(type(arr_from_tuple))
print(arr_from_tuple)

 

列表、元组是有逗号隔开的,而数组元素之间没有逗号哦

 

术语

Numpy

Numerical Python  python科学计算

 

ndarray

N-dimensional array  N维数组

 

标签:arr,简介,001,数组,np,array,Numpy,ndarray
From: https://www.cnblogs.com/allenxx/p/17891287.html

相关文章

  • Python NumPy 合并数组和分割数组
    在Python的NumPy库中,合并和分割数组是两种常用的操作,用于重组和分解数据集。将多个数据集合并为一个数据集,方便进行后续的处理。将数据集拆分为多个子数据集,用于并行处理或分布式处理。将数据集按指定条件进行分组,方便进行分析。1、合并数组合并数组是一种常见操作,允许你......
  • Qt6 c++教程2 Qt Creator简介
    2QtCreator简介QtCreator是Qt自带的集成开发环境(IDE),用于跨平台应用程序开发。在本章中,您将学习QtCreator集成开发环境的基础知识,并了解集成开发环境的用户界面(UI)。我们还将了解如何在QtCreator中创建和管理项目。本Qt模块包括使用QtCreator开发一个简单的Qt应用程序、......
  • RealSence摄像头的简介
    RealSence摄像头简介 背景:IntelRealSense技术最初是一种通过摄像头、红外和激光投影实现深度感知的技术。随着时间的推移,Intel推出了一系列RealSense摄像头,为开发者和应用程序提供了强大的工具,以在计算机视觉和深度感知方面进行创新。 主要应用方向:机器视觉和计算机视......
  • P1024 [NOIP2001 提高组] 一元三次方程求解( 普及- ) 题解
    题目传送门思路:1可以直接暴力2二分搜索答案3盛金公式一元三次方程:\(ax^3+cx^2+d=0\)重根判别公式:\(A=b^2-3ac\)\(B=bc-9ad\)\(C=c^2-3bd\)当\(A=B=0\)时,\(X1=X2=X3=-b/3a=-c/b=-3d/c\)4牛顿迭代法:对于一个已知的x值,每一次根据函数在这一点的导数,把x移动到,切......
  • Python NumPy 数组形状操作
    1、获取数组的形状 1、获取数组的形状要获取数组的形状,可以使用 shape 属性。文档:Pythonnumpy.shape函数方法的使用2、改变数组形状要改变数组的形状,可以使用 reshape() 方法。文档:Pythonnumpy.reshape函数方法的使用3、改变数组的大小要改变数组的大小,可以使用 r......
  • HHDESK右键管理简介
    在HHDESK管理文件,除了基本的打开、删除、复制、粘贴、重命名外,还有多种便捷编辑方式。可以分别以下列模式打开文档: 文本模式即是以文本编辑器打开文档。 1二进制模式可进行二进制编辑。 2JSON模式可对JSON文件进行直观的解析。左侧配有节点框,方便操作与浏览;树形......
  • Qt6 c++教程1简介
    1Qt6简介Qt一个跨平台应用程序开发框架,旨在为桌面、嵌入式和移动平台创建具有统一用户界面(UI)的优秀软件应用程序。它为开发人员设计和构建优秀应用程序提供了一套强大的工具,而无需担心平台依赖性。本章主要内容:Qt介绍使用Qt的原因下载和安装Qt从源代码构建Qt61.1Qt简......
  • 无涯教程-Angular7 - 简介
    Angular7是一个开放源代码JavaScript框架,用于在JavaScript, html 和Typescript(JavaScript的超集)中构建Web应用程序和应用程序。Angular为animation,httpservice和materials提供了内置功能,这些功能又具有auto-complete,naigation,toolbar,menus等功能。代码以Typescript编写......
  • Python NumPy 数组索引和切片
    1、普通索引普通索引是指使用单个整数或整数列表来索引数组中的元素。1)单个元素索引要访问NumPy数组的单个元素,可以使用单个整数索引。索引从0开始,表示数组的第一行第一个元素。2)多维元素索引2、高级索引高级索引允许使用布尔值或数组来索引数组中的元素。1)布尔索引布......
  • UML图简介
     一、UML的九种图详细说明 类图(ClassDiagram)类图是UML中最重要的图表之一,它用于描述系统中类的静态结构。类图包括类、接口、继承和关联等元素。通过类图,开发人员可以清楚地看到类之间的关系,如继承、聚合和关联等。  对象图(ObjectDiagram)对象图是类图的实例化,它表示系......