NumPy入个门吧


theme: smartblue

点赞 + 关注 + 收藏 = 学会了

NumPy是什么?

NumPy 的全称叫 Numerical Python ,它是 Python 科学计算最重要的基础包之一。很多提供科学计算的包都是基于 NumPy 之上建立的,著名的 pandas 也是。

NumPy 核心的数据结构叫 ND array ,也就是多维数组。和 Python 里的列表有点相似,但又不一样。NumPy 的多维数组比 Python 的列表更高效,因为它底层是用C语言编写的。

NumPy 在数据分析领域是一个热门工具,它可以用于数据整理、清洗、过滤、排序、转换和计算。NumPy 的数据类型需要统一,所以在进行大规模数学运算时它的执行效率会非常高。在做数据分析时,通常会对数值型和布尔型数据进行操作。如果数组中既有文本又有数字就不能进行算数运算了,而且NumPy 也会将整个数组的数据类型变成 object

学习 NumPy 最重要掌握向量化、广播和通用函数。这些内容本文都会讲到。

安装并使用NumPy

安装 NumPy

使用以下命令安装 NumPy

bash pip install numpy

引入 NumPy

在使用 NumPy 之前,要先引入它。

python import numpy as np

创建数组

手动传值

NumPy 的核心数据结构是多维数组,要创建数组可以用 array 方法。

array 函数能接收任意序列型的对象,然后生成一个包含传入数据的 NumPy 数组。

```python

一维数组

arr = np.array([1, 2, 3])

二维数组

arr = np.array([[1, 2, 3], [4, 5, 6]]) ```

多少维数组,数左边的方括号数量就知道了。

你也可以这么写。

python data = [1, 2, 3] arr = np.array(data)

除了上面这种手动传入值的方法,还可以用 NumPy 提供的方法创建特殊数组。

zeros: 全0数组

创建元素全为0的数组,可以用 zeros 方法

python arr = np.zeros(6) print(arr) # 输出:array([0., 0., 0., 0., 0., 0.])

如果你需要创建多维数组,且值全为0,可以这么做:

python np.zeros((行数, 列数))

需要注意,此时 zeros 后面跟着2层括号。

````python arr = np.zeros((3, 4)) print(arr)

输出: array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]) ````

ones: 全1数组

创建元素全为1的数组,可以用 ones 方法

python arr = np.ones(6) print(arr) # 输出:array([1., 1., 1., 1., 1., 1.])

要使用 ones 创建多维数组,且值全为1,和 zeros 创建多维数组的语法是一样的。

python np.ones((行数, 列数))

需要注意,在使用 zerosones 方法创建数组时,所有元素都是有小数点的,创建出来的元素都是浮点数。

empty: 空值数组

创建空值数组,可以使用 empty 方法

语法如下:

```python

一维

np.empty(元素个数)

多维

np.empyt((行数, 列数)) ```

arange: 范围数组

arangeNumPy 提供的一种快速创建数组的方法,它和 Pythonrange 有点像。

语法如下:

python np.arange(起始值, 结束值, 步长)

举个例子,创建一个0~10,步长为2的数组。

python arr = np.arange(0, 10, 2) print(arr) # 输出:array([0, 2, 4, 6, 8])

arange 创建的数组是不包含结束值的。

如果你只传1个值也行,那数组的值会从0开始,到你指定的值结束(不包含指定值)。比如:

python arr = np.arange(10) print(arr) # 输出:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

随机数多维数组

使用 np.random.randn(行数, 列数) 可以创建一个指定行数和列数,元素值为随机数的数组。

比如生成一个2行3列,值为随机数的数组。

````python arr = np.random.randn(2, 3) print(arr)

输出: array([[-1.40881835, 0.13351722, -1.46305705], [-0.1046862 , 0.63644499, 0.4796577 ]]) ````

访问数组元素

数字索引

访问 NumPy 数组元素的方法和 Python 访问列表元素的方法一样,都是使用“方括号”和“下标”进行访问。下标从0开始。

python arr = np.array([1, 2, 3]) print(arr[1]) # 输出:2

如果要访问二维数组的某个元素,可以这样写:

python arr = np.array([[10, 2, 3, 40], [50, 60, 7, 8]]) print(arr[0][3]) # 输出:40

访问多维数组也是同样原理。

NumPy 也支持切片的方式访问,切片需要传入一个起始索引(包含自身)和一个结束索引(不包含自身),两个索引之间用一个冒号分隔。

python arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) print(arr[1:4]) # 输出:[2 3 4]

多维数组的切片方法:

python arr = np.array([[10, 2, 3, 40], [50, 60, 7, 8]]) print(arr[1:2, 1:2]) # 输出:60

既然能获取,那就能修改。

python arr = np.array([1, 2, 3, 4]) arr[0] = 100 print(arr) # 输出:[100 2 3 4]

通过切片的方式获取到的元素,修改值时也会影响原数组的值。

布尔型索引

NumPy 的数组还支持布尔型索引。

python arr1 = np.array([1, 2, 3, 4, 5]) arr2 = np.array([True, False, True, False, False]) print(arr1[arr2]) # 输出:[1 3]

布尔型索引的相关应用稍后会讲到。

向量化和广播

向量化和广播都是在解决“遍历”问题。

比如你需要让数组的每个元素值增加1,你可以直接用数组+1,不需要手动一个个元素进行遍历。这叫向量化

NumPy 会将标量值传播到数组的各个元素。标量指的是一种数据类型,比如浮点型和字符串。

````python arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) print(arr + 1)

输出: [[2 3 4 5] [6 7 8 9]] ````

在处理两个形状相同的数组也是同样道理。

````python arr1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) arr2 = np.array([[10, 20, 30, 40], [50, 60, 70, 80]]) print(arr1 + arr2)

输出: [[11 22 33 44] [55 66 77 88]] ````

如果大小相同的数组做比较的话,会生成一个布尔值数组。

````python arr1 = np.array([[1, 20, 30, 4], [5, 6, 70, 80]]) arr2 = np.array([[10, 2, 3, 40], [50, 60, 7, 8]]) print(arr1 > arr2)

输出: [[False True True False] [False False True True]] ````

如果两个数组的形状不一样,NumPy 会自动将较小的数组扩展成较大数组的形状,这叫广播

````python arr1 = np.array([10, 20, 30, 40]) arr2 = np.array([[10, 2, 3, 40], [50, 60, 7, 8]]) print(arr1 + arr2)

输出: [[20 22 33 80] [60 80 37 48]] ````

常用方法

接下来会讲一些 NumPy 的常用方法,包含大家说的“通用函数”。

ndim: 获取数组维度

前面提到可以通过数方括号的方式知道数组的维度,除此之外,NumPy 也提供了一个 ndim 属性可以获取数组维度。

```python arr1 = np.array([1, 2, 3]) arr2 = np.array([[1, 2, 3], [4, 5, 6]])

print(arr1.ndim) # 输出:1 print(arr2.ndim) # 输出:2 ```

shape: 获取各个维度的元素的个数

使用 shape 可以获取数组各个维度的元素个数,并以元组的方式放回。

```python arr1 = np.array([1, 2, 3]) arr2 = np.array([[1, 2, 3], [4, 5, 6]])

print(arr1.shape) # 输出:(3,)。只有1个数值,表示arr1只有1个维度,第1维度有3个元素。 print(arr2.shape) # 输出:(2, 3)。有2个数值,表示arr2有2个维度,第一个维度有2个元素,第2个维度有3个元素。 ```

size: 获取数组元素的总数

只要不是九漏鱼应该都知道 size 这个单词的意思。

```python arr1 = np.array([1, 2, 3]) arr2 = np.array([[1, 2, 3], [4, 5, 6]])

print(arr1.size) # 输出:3 print(arr2.size) # 输出:6 ```

dtype: 返回数组元素的类型

使用 dtype 可以获取数组元素的数据类型。

```python arr1 = np.array([1., 2., 3.]) arr2 = np.array([[1, 2, 3], [4, 5, 6]]) arr3 = np.array([True, False])

print(arr1.dtype) # 输出:float64 print(arr2.dtype) # 输出:int32 print(arr3.dtype) # 输出:bool ```

max(): 求最大值

使用 max() 方法可以求出数组元素的最大值,多维数组也可以。

```python arr1 = np.array([1., 2., 3.]) arr2 = np.array([[10, 20, 30], [4, 5, 6]])

print(arr1.max()) # 输出:3.0 print(arr2.max()) # 输出:30 ```

min(): 求最小值

```python arr1 = np.array([1., 2., 3.]) arr2 = np.array([[10, 20, 30], [4, 5, 6]])

print(arr1.min()) # 输出:1.0 print(arr2.min()) # 输出:4 ```

mean(): 求平均值

```python arr1 = np.array([1., 2., 3.]) arr2 = np.array([[10, 20, 30], [4, 5, 6]])

print(arr1.mean()) # 输出:2.0 print(arr2.mean()) # 输出:12.5 ```

sum(): 求和

```python arr1 = np.array([1., 2., 3.]) arr2 = np.array([[10, 20, 30], [4, 5, 6]])

print(arr1.sum()) # 输出:6.0 print(arr2.sum()) # 输出:75 ```

sort(): 排序

python


NumPy 提供了一个排序方法,用的时候需要 np.sort(数组) 这样用。

python arr = np.array([10, 4, 2, 11, 3]) print(np.sort(arr)) # 输出:[ 2 3 4 10 11] print(arr) # 输出:[10 4 2 11 3]

sorted(): 排序,Python内置方法

使用 sorted() 方法可以对数组进行排序,而且不会改变原数组。sorted()Python 内置的排序方法。

python arr = np.array([10, 4, 2, 11, 3]) print(sorted(arr)) # 输出:[2, 3, 4, 10, 11] print(arr) # 输出: [10 4 2 11 3]

sorted() 方法第一个参数接收一个数组,默认是从小到大排序。

如果想从大到小排序,可以将 reverse 参数设置为 True

python arr = np.array([10, 4, 2, 11, 3]) print(sorted(arr, reverse=True)) # 输出:[11, 10, 4, 3, 2]

条件筛选

假如需要返回大于10的元素,可以这样写。

python arr = np.array([10, 40, 2, 11, 3]) print(arr > 10) # 输出:[False True False True False]

此时会返回一个布尔类型的数组,我们再将这个数组用前面提到的“布尔型索引”方法就能获取到大于10的元素了。

python arr = np.array([10, 40, 2, 11, 3]) print(arr[arr > 10]) # 输出:[40 11]

如果有多个筛选条件,我们需要使用 &(与)|(或),不能用 Python 关键字 andor

比如我们要筛选出大于10且小于20的值,可以这样写:

python arr = np.array([10, 40, 2, 11, 3]) print(arr[(arr > 10) & (arr < 20)]) # 输出:[11]

T: 轴对换

如果我们想将一个2行3列的数组变成3行2列,可以这样写:

````python arr = np.array([[10, 20, 30], [303, 202, 101]]) arr.T

返回: array([[ 10, 303], [ 20, 202], [ 30, 101]]) ````


640 (10).gif

点赞 + 关注 + 收藏 = 学会了

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值