Python基础 Numpy菜鸟教程

article/2025/10/15 18:40:00

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。

NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

使用 pip 安装 :

pip3 install --user numpy scipy matplotlib

--user 选项可以设置只安装在当前的用户下,而不是写入到系统目录。

默认情况使用国外线路,国外太慢,我们使用清华的镜像就可以:

pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

安装验证 :

>>> from numpy import *
>>> eye(4)
array([[1., 0., 0., 0.],[0., 1., 0., 0.],[0., 0., 1., 0.],[0., 0., 0., 1.]])

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

ndarray 对象是用于存放同类型元素的多维数组。

ndarray 中的每个元素在内存中都有相同存储大小的区域。

ndarray 内部由以下内容组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。

  • 数据类型或 dtype,描述在数组中的固定大小值的格子。

  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。

  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

 

实例 1

import numpy as np 
a = np.array([1,2,3]) 
print (a)

实例 2

# 多于一个维度 
import numpy as np 
a = np.array([[1, 2], [3, 4]]) 
print (a)

实例 3

# 最小维度 
import numpy as np 
a = np.array([1, 2, 3, 4, 5], ndmin = 2) 
print (a)

实例 4

# dtype 参数 
import numpy as np 
a = np.array([1, 2, 3], dtype = complex) 
print (a)

 NumPy 数据类型

 

 数据类型对象 (dtype)

numpy.dtype(object, align, copy)
  • object - 要转换为的数据类型对象
  • align - 如果为 true,填充字段使其类似 C 的结构体。
  • copy - 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用

实例 1

import numpy as np 
# 使用标量类型 
dt = np.dtype(np.int32) 
print(dt)

实例 2

import numpy as np 
# int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替 
dt = np.dtype('i4') 
print(dt)

实例 3

import numpy as np 
# 字节顺序标注 
dt = np.dtype('<i4') 
print(dt)

实例 4

# 首先创建结构化数据类型 
import numpy as np 
dt = np.dtype([('age',np.int8)]) 
print(dt)

实例 5

# 将数据类型应用于 ndarray 对象 
import numpy as np 
dt = np.dtype([('age',np.int8)]) 
a = np.array([(10,),(20,),(30,)], dtype = dt) 
print(a)

实例 6

# 类型字段名可以用于存取实际的 age 列 
import numpy as np 
dt = np.dtype([('age',np.int8)]) 
a = np.array([(10,),(20,),(30,)], dtype = dt) 
print(a['age'])

NumPy 数组属性

NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。

在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。

很多时候可以声明 axis。axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。

NumPy 的数组中比较重要 ndarray 对象属性有:

实例

import numpy as np 
a = np.arange(24) 
print (a.ndim) 
# a 现只有一个维度 
# 现在调整其大小 
b = a.reshape(2,4,3) 
# b 现在拥有三个维度 
print (b.ndim)
#ndarray.ndim 用于返回数组的维数,等于秩

实例

import numpy as np 
a = np.array([[1,2,3],[4,5,6]]) 
print (a.shape)

实例

import numpy as np 
a = np.array([[1,2,3],[4,5,6]]) 
a.shape = (3,2) 
print (a)

实例

import numpy as np 
a = np.array([[1,2,3],[4,5,6]]) 
b = a.reshape(3,2) 
print (b)

NumPy 创建数组

umpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:

numpy.empty(shape, dtype = float, order = 'C')

实例

import numpy as np 
x = np.empty([3,2], dtype = int) 
print (x)

numpy.zeros

创建指定大小的数组,数组元素以 0 来填充:

mport numpy as np# 默认为浮点数
x = np.zeros(5) 
print(x)# 设置类型为整数
y = np.zeros((5,), dtype = int) 
print(y)# 自定义类型
z = np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')])  
print(z)

numpy.ones

创建指定形状的数组,数组元素以 1 来填充:


import numpy as np# 默认为浮点数
x = np.ones(5) 
print(x)# 自定义类型
x = np.ones([2,2], dtype = int)
print(x)

NumPy 从已有的数组创建数组

numpy.asarray

numpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个。

numpy.asarray(a, dtype = None, order = None)

numpy.frombuffer

numpy.frombuffer 用于实现动态数组。

numpy.frombuffer 接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象。

numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)

 注意:buffer 是字符串的时候,Python3 默认 str 是 Unicode 类型,所以要转成 bytestring 在原 str 前加上 b。

 NumPy 从数值范围创建数组

numpy.arange

numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:

numpy.arange(start, stop, step, dtype)

numpy.linspace

numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

 

 NumPy 切片和索引

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。

ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

实例

import numpy as np 
a = np.arange(10) 
b = a[2:7:2] # 从索引 2 开始到索引 7 停止,间隔为 2 
print(b)

NumPy 高级索引

实例

import numpy as np 
x = np.array([[1, 2], [3, 4], [5, 6]]) 
y = x[[0,1,2], [0,1,0]] 
print (y)

NumPy 广播(Broadcast)

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。

如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。

实例

import numpy as np 
a = np.array([1,2,3,4]) 
b = np.array([10,20,30,40]) 
c = a * b 
print (c)

实例

import numpy as np 
a = np.array([[ 0, 0, 0], [10,10,10], [20,20,20], [30,30,30]]) 
b = np.array([1,2,3]) 
bb = np.tile(b, (4, 1)) # 重复 b 的各个维度 
print(a + bb)

简单理解:对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:

  • 数组拥有相同形状。
  • 当前维度的值相等。
  • 当前维度的值有一个是 1。

若条件不满足,抛出 "ValueError: frames are not aligned" 异常。

NumPy 迭代数组

NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。

迭代器最基本的任务的可以完成对数组元素的访问。

接下来我们使用 arange() 函数创建一个 2X3 数组,并使用 nditer 对它进行迭代。

实例

import numpy as np 
a = np.arange(6).reshape(2,3) 
print ('原始数组是:') 
print (a) print ('\n') 
print ('迭代输出元素:') 
for x in np.nditer(a): print (x, end=", " ) 
print ('\n')

修改数组形状

翻转数组 

 修改数组维度

 连接数组

 分割数组

 数组元素的添加与删除

 NumPy 位运算

注:也可以使用 "&"、 "~"、 "|" 和 "^" 等操作符进行计算。

NumPy 字符串函数

NumPy 数学函数

NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等。

三角函数


import numpy as npa = np.array([0,30,45,60,90])
print ('不同角度的正弦值:')
# 通过乘 pi/180 转化为弧度  
print (np.sin(a*np.pi/180))
print ('\n')
print ('数组中角度的余弦值:')
print (np.cos(a*np.pi/180))
print ('\n')
print ('数组中角度的正切值:')
print (np.tan(a*np.pi/180))

舍入函数

numpy.around() 函数返回指定数字的四舍五入值。


import numpy as npa = np.array([1.0,5.55,  123,  0.567,  25.532])  
print  ('原数组:')
print (a)
print ('\n')
print ('舍入后:')
print (np.around(a))
print (np.around(a, decimals =  1))
print (np.around(a, decimals =  -1))

numpy.floor()

numpy.floor() 返回小于或者等于指定表达式的最大整数,即向下取整。


import numpy as npa = np.array([-1.7,  1.5,  -0.2,  0.6,  10])
print ('提供的数组:')
print (a)
print ('\n')
print ('修改后的数组:')
print (np.floor(a))

numpy.ceil()

numpy.ceil() 返回大于或者等于指定表达式的最小整数,即向上取整。


import numpy as npa = np.array([-1.7,  1.5,  -0.2,  0.6,  10])  
print  ('提供的数组:')
print (a)
print ('\n')
print ('修改后的数组:')
print (np.ceil(a))

NumPy 算术函数

NumPy 算术函数包含简单的加减乘除: add()subtract()multiply()divide()

需要注意的是数组必须具有相同的形状或符合数组广播规则。

实例


import numpy as np a = np.arange(9, dtype = np.float_).reshape(3,3)  
print ('第一个数组:')
print (a)
print ('\n')
print ('第二个数组:')
b = np.array([10,10,10])  
print (b)
print ('\n')
print ('两个数组相加:')
print (np.add(a,b))
print ('\n')
print ('两个数组相减:')
print (np.subtract(a,b))
print ('\n')
print ('两个数组相乘:')
print (np.multiply(a,b))
print ('\n')
print ('两个数组相除:')
print (np.divide(a,b))

numpy.reciprocal()

numpy.reciprocal() 函数返回参数逐元素的倒数。如 1/4 倒数为 4/1

numpy.power()

numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。

numpy.mod()

numpy.mod() 计算输入数组中相应元素的相除后的余数。 函数 numpy.remainder() 也产生相同的结果。

NumPy 排序、条件刷选函数

numpy.sort()

numpy.sort() 函数返回输入数组的排序副本。函数格式如下:

numpy.sort(a, axis, kind, order)

参数说明:

  • a: 要排序的数组
  • axis: 沿着它排序数组的轴,如果没有数组会被展开,沿着最后的轴排序, axis=0 按列排序,axis=1 按行排序
  • kind: 默认为'quicksort'(快速排序)
  • order: 如果数组包含字段,则是要排序的字段

numpy.argsort()

numpy.argsort() 函数返回的是数组值从小到大的索引值。

numpy.lexsort()

numpy.lexsort() 用于对多个序列进行排序。把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后的列。

这里举一个应用场景:小升初考试,重点班录取学生按照总成绩录取。在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照英语成绩录取…… 这里,总成绩排在电子表格的最后一列,数学成绩在倒数第二列,英语成绩在倒数第三列。

numpy.argmax() 和 numpy.argmin()

numpy.argmax() 和 numpy.argmin()函数分别沿给定轴返回最大和最小元素的索引。

numpy.nonzero()

numpy.nonzero() 函数返回输入数组中非零元素的索引。

numpy.where()

numpy.where() 函数返回输入数组中满足给定条件的元素的索引。

numpy.extract()

numpy.extract() 函数根据某个条件从数组中抽取元素,返回满条件的元素。

### ~tips:该篇只是简单的介绍Numpy库的安装及一些内置方法的使用,非常的基础。看不懂的地方多看几遍应该就很容易理解。另外有需要进阶的学习的people可以去Numpy教程官网(上文其实也是大同小异与其手册内容~~~只是其中叫基础的部分的提炼)学习学习。www.runoob.com     Numpy###

 


http://chatgpt.dhexx.cn/article/NFPeHSJy.shtml

相关文章

Numpy教程(一)

参考资料&#xff1a;清华计算机博士带你学-Python金融量化分析 目录 demo1-numpy与for循环对比 demo2-向量内&#xff08;点&#xff09;积求和&#xff08;对应位置相乘&#xff09; demo3-ndarray常见属性 demo4-数组的创建 demo5-批量运算 demo6-索引与切片 demo7-布…

NumPy进阶教程——超详细

Numpy基础教程&#xff1a; https://blog.csdn.net/qq_43328040/article/details/106601065 ———————————————————————————————————— 文章目录 一.ndarray对象内幕1.1 Numpy dtype 层次结构 二.高阶数组操作2.1重塑数组2.2 C顺序和Fortran…

Numpy安装教程

一、查看自己的python版本 使用winR弹出搜索框&#xff0c;输入cmd打开命令提示符&#xff0c;在其中输入python并按回车&#xff0c;得到以下结果 查看自己使用的python版本 二、下载对应的Numpy版本 Python Extension Packages for Windows - Christoph Gohlke (uci.edu) 可…

Python Numpy库教程(超详细)

1 Numpy概述 1.1 概念 Python本身含有列表和数组&#xff0c;但对于大数据来说&#xff0c;这些结构是有很多不足的。由于列表的元素可以是任何对象&#xff0c;因此列表中所保存的是对象的指针。对于数值运算来说这种 结构比较浪费内存和CPU资源。至于数组对象&#xff0c;它…

Python基础(十) | Numpy详细教程

⭐本专栏旨在对Python的基础语法进行详解&#xff0c;精炼地总结语法中的重点&#xff0c;详解难点&#xff0c;面向零基础及入门的学习者&#xff0c;通过专栏的学习可以熟练掌握python编程&#xff0c;同时为后续的数据分析&#xff0c;机器学习及深度学习的代码能力打下坚实…

【python学习】最全Numpy教程

1. Numpy概述 NumPy&#xff08;Numerical Python的简称&#xff09;是Python数值计算最重要的基础包。大多数提供科学计算的包都是用NumPy的数组作为构建基础。1.1.1. Why NumPy? 1.一个强大的N维数组对象ndarray&#xff0c;具有矢量算术运算和复杂广播能力的快速且节省空…

Python Numpy库教程

目录 1 Numpy概述1.1 概念1.2 功能1.3 对象1.4 数据类型1.5 数组属性 2 Numpy数组操作2.1 Numpy创建2.1.1 利用列表生成数组2.1.2 利用random模块生成数组2.1.3 创建特定形状数组 2.2 索引和切片2.2.1 元素表示2.2.2 切片表示2.2.3 多维数组的切片2.2.4 布尔索引2.2.5 元素查找…

【数据分析】Numpy入门教程(超详细)

Numpy 教程 什么是Numpy&#xff1f;Numpy(Numerical Python)是一个Python扩展库&#xff0c;支持大量的维度数组和矩阵运算&#xff0c;此外也针对数组运算提供大量的数学函数库。 其主要用于数组计算&#xff0c;特点包括&#xff1a; 一个强大的N维数组对象ndarray广播功…

Python之Numpy详细教程

NumPy - 简介 NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。 Numeric&#xff0c;即 NumPy 的前身&#xff0c;是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray &#xff0c;它拥有一些额外的功能。…

Java泛型方法的定义和使用

目录 一、基本介绍1、Java泛型的基本语法格式为:2、在使用泛型时,还需要注意以下几点:二、泛型的优点1、类型安全2、消除强制类型转换3、更高的效率4、潜在的性能收益三、常见泛型字母含义四、使用泛型时的注意事项五、泛型的使用1、泛型类2、泛型接口3、泛型通配符4、泛型方…

java参数传入泛型类型_java泛型方法参数传递

Java参数&#xff0c;不管是原始类型还是引用类型&#xff0c;传递的都是副本(有另外一种说法是传值&#xff0c;但是说传副本更好理解吧&#xff0c;传值通常是相对传址而言)。 如果参数类型是原始类型&#xff0c;那么传过来的就是这个参数的一个副本&#xff0c;也就是这个…

Java 泛型作为方法参数

Java 泛型作为方法参数 例程源码&#xff1a; import java.util.List;public class GoodsSeller {public void sellGoods(List<? extends Goods> goods){//调用集合中的sell方法for(Goods g:goods){g.sell();}} }public class Book extends Goods {Overridepublic void …

49天精通Java,第32天,Java泛型方法的定义和使用

🏆作者简介:哪吒,CSDN2022博客之星Top1、CSDN2021博客之星Top2、多届新星计划导师✌、博客专家💪 ,专注Java硬核干货分享,立志做到Java赛道全网Top N。 🏆本文收录于Java基础教程(入门篇),包含面向对象、基本数据类型、数组、继承和多态、泛型、枚举等Java基础知识…

java泛型 方法返回值带有泛型 <T>

方法返回值前的<T>的左右是告诉编译器&#xff0c;当前的方法的值传入类型可以和类初始化的泛型类不同&#xff0c;也就是该方法的泛型类可以自定义&#xff0c;不需要跟类初始化的泛型类相同。 转自&#xff1a;https://blog.csdn.net/huyashangding/article/details/9…

Java 泛型方法/接口、泛型限定

文章目录一、为什么要定义泛型方法1、从泛型类到泛型方法的演变过程2、定义泛型方法的好处二、创建一个泛型方法格式常用的形式三、泛型接口1、格式2、例子四、类型通配符(泛型的高级应用)1、什么是通配符 (?)2、类型通配符上限定(? extends T >可以接收T类型或者T的子类型…

Java 泛型方法

本文包含&#xff1a; 定义泛型方法泛型方法和类型通配符的区别Java 7 的“菱形”语法与泛型构造器设定通配符下限泛型方法与方法重载Java 8 改进的类型推断 1. 定义泛型方法 假设需要实现这样一个方法&#xff1a;该方法负责将一个 Object 数组的所有元素添加到一个 Collec…

【java】泛型方法的定义

一、定义泛型方法的格式 二、调用泛型方法的语法格式 三、解释 1、定义泛型方法时&#xff0c;必须在返回值前边加一个<T>&#xff0c;来声明这是一个泛型方法&#xff0c;持有一个泛型T&#xff0c;然后才可以用泛型T作为方法的返回值。 2、Class<T>的作用就是指…

Java 中的泛型(两万字超全详解)

文章目录 前言一、泛型概述1. 什么是泛型&#xff1f;为什么要使用泛型&#xff1f;2. 泛型使用场景3. 泛型概述小结 二、泛型类1. 泛型类的定义2. 泛型类的使用 三、泛型接口四、泛型方法1. 泛型方法的定义2. 泛型方法的使用3. 泛型方法中的类型推断 五、类型擦除1. 什么是类型…

Java中的泛型方法

泛型是什么意思在这就不多说了&#xff0c;而Java中泛型类的定义也比较简单&#xff0c;例如&#xff1a;public class Test{}。这样就定义了一个泛型类Test&#xff0c;在实例化该类时&#xff0c;必须指明泛型T的具体类型&#xff0c;例如&#xff1a;Test t new Test();&am…

【软件测试】使用C++ Test进行动态测试

测试目的 1.掌握动态测试的方法。 2.掌握使用Parasoft C Test进行动态测试。 测试环境 Windows XP, Parasoft C Test 9.2 测试内容 使用Parasoft C Test进行动态测试&#xff0c;包括自动化测试、自定义测试用例、数据源测试用例、桩函数机制。 测试过程及结果 4.1 基于…