numpy

0.1 Numpy介绍

NumPy(Numerical Python)是Python的⼀种开源的数值计算扩展。提供多维数组对象,各种派⽣对象(如掩码数组和矩阵),这种⼯具可⽤来存储和处理⼤型矩阵,⽐Python⾃身的嵌套列表(nested list structure)结构要⾼效的多(该结构也可以⽤来表示矩阵(matrix)),⽀持⼤量的维度数组与矩阵运算,此外也针对数组运算提供⼤量的数学函数库,包括数学、逻辑、形状操作、排序、选择、输⼊输出、离散傅⽴叶变换、基本线性代数,基本统计运算和随机模拟等等。

0.1.1 Numpy的特点

提供了强大N维数组类型NDAarray 可以用来存储任意维度的数据;
集成了统计学、科学计算、线性代数、矩阵运算、矢量处理等算法
提供了成熟的⼴播功能和掩码数组运算
提供了强大的随机数⽣成功能

0.2 Numpy安装

安装 NumPy 最简单的方法就是使用 pip 工具:
pip3 install --user numpy scipy matplotlib
–user 选项可以设置只安装在当前的用户下,而不是写入到系统目录。

默认情况使用国外线路,国外太慢,我们使用清华的镜像就可以:
pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

Linux 下安装
Ubuntu & Debian
sudo apt-get install python3-numpy python3-scipy python3-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose

CentOS/Fedora
sudo dnf install numpy scipy python-matplotlib ipython python-pandas sympy python-nose atlas-devel

Mac 系统
Mac 系统的 Homebrew 不包含 NumPy 或其他一些科学计算包,所以可以使用以下方式来安装:
pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

相关链接
NumPy 官网 http://www.numpy.org/
NumPy 源代码:https://github.com/numpy/numpy
SciPy 官网:https://www.scipy.org/
SciPy 源代码:https://github.com/scipy/scipy
Matplotlib 教程:Matplotlib 教程
Matplotlib 官网:https://matplotlib.org/
Matplotlib 源代码:https://github.com/matplotlib/matplotlib

0.2.1安装验证

测试是否安装成功:
import numpy as np
为了使用方便,也为了风格的统一,一般在导入后将 numpy 取一个别名为np

0.3 Numpy数组对象ndarray

0.3.1 ndarray介绍

数组(Array):同类性数据元素按一定顺序有序排列的集合称为
数组
NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系
列数组叠加组成的N维数组;
NumPy最核心的数据类型是N维数组(The N-Dimensional
Array)ndarry。
数组和列表一样,以 0 下标为开始进行索引

ndarray数组示意图:

在这里插入图片描述

  1. axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。
    在一维数组里axis=0表示x轴;
    在二维数组里axis=1表示x轴,axis=0表示y轴;
    在三位数组里axis=0表示y轴,axis=1表示x轴,axis=1表示z轴.
    即:所见即所得。
    axis=0 表示行(实际操作是列)
    axis=1 表示列(实际操作是行)
    在这里插入图片描述

0.3.2. 一维数组、二维数组、三位数组之间的区别

实例:
假设某比赛分A,B,C三个组。每组有参赛者5名,分别来自15个不同的国家。
*一维数组
对于A组来说,一维数组相当于建立一个姓名列表 name =[‘参赛者A1’,‘参赛者A2’,…,‘参赛者A5’],列表里有5个元素,代表五个参赛者。
*二维数组
接着上面的,对于A组来说,二维数组相当于建立一个 姓名-国籍 数组
输出的(5, 2)表示,5行2列。意思是五个参赛者除了姓名属性外,还有国籍属性。有几个属性就有几列。相当于数据库表里的字段,有几个字段数据库表就有几列。
import numpy as np
nameCountry= np.array([[‘参赛者A1’,‘国籍A1’],
[‘参赛者A2’,‘国籍A2’],
[‘参赛者A3’,‘国籍A3’],
[‘参赛者A4’,‘国籍A4’],
[‘参赛者A5’,‘国籍A5’]])
print(nameCountry)
print(nameCountry.shape)
输出为:
[[‘参赛者A1’ ‘国籍A1’]
[‘参赛者A2’ ‘国籍A2’]
[‘参赛者A3’ ‘国籍A3’]
[‘参赛者A4’ ‘国籍A4’]
[‘参赛者A5’ ‘国籍A5’]]
(5, 2)
*三维数组
在上面两个的基础上。每组参赛者都有姓名-国籍属性,有三组,就形成了三维数组。代码如下:
import numpy as np
nameCountrys = np.array([
[[‘参赛者A1’,‘国籍A1’],[‘参赛者A2’,‘国籍A2’],[‘参赛者A3’,‘国籍A3’],[‘参赛者A4’,‘国籍A4’],[‘参赛者A5’,‘国籍A5’]],
[[‘参赛者B1’,‘国籍B1’],[‘参赛者B2’,‘国籍B2’],[‘参赛者B3’,‘国籍B3’],[‘参赛者B4’,‘国籍B4’],[‘参赛者B5’,‘国籍B5’]],
[[‘参赛者C1’,‘国籍C1’],[‘参赛者C2’,‘国籍C2’],[‘参赛者C3’,‘国籍C3’],[‘参赛者C4’,‘国籍C4’],[‘参赛者C5’,‘国籍C5’]]
])
print(nameCountrys)
print(nameCountrys.shape)
输出为:
[[‘参赛者A1’ ‘国籍A1’]
[‘参赛者A2’ ‘国籍A2’]
[‘参赛者A3’ ‘国籍A3’]
[‘参赛者A4’ ‘国籍A4’]
[‘参赛者A5’ ‘国籍A5’]]
(5, 2)
[[[‘参赛者A1’ ‘国籍A1’]
[‘参赛者A2’ ‘国籍A2’]
[‘参赛者A3’ ‘国籍A3’]
[‘参赛者A4’ ‘国籍A4’]
[‘参赛者A5’ ‘国籍A5’]]


[[‘参赛者B1’ ‘国籍B1’]
[‘参赛者B2’ ‘国籍B2’]
[‘参赛者B3’ ‘国籍B3’]
[‘参赛者B4’ ‘国籍B4’]
[‘参赛者B5’ ‘国籍B5’]]


[[‘参赛者C1’ ‘国籍C1’]
[‘参赛者C2’ ‘国籍C2’]
[‘参赛者C3’ ‘国籍C3’]
[‘参赛者C4’ ‘国籍C4’]
[‘参赛者C5’ ‘国籍C5’]]]
(3, 5, 2)


总结:其实一维就是只有一个属性,一种特征;二维就是有多个属性,多个特征;三维即有多组,每组的属性相同。

参数说明:
在这里插入图片描述

0.4 ndarray的创建

创建一个 ndarray 只需调用 NumPy 的 array 函数即可:
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)
输出结果如下:
[1 2 3]
实例 2
多一个维度
import numpy as np
a = np.array([[1, 2], [3, 4]])
print (a)
输出结果如下:
[[1 2]
[3 4]]
实例 3
最小维度
import numpy as np
a = np.array([1, 2, 3, 4, 5], ndmin = 2)
print (a)
输出结果如下:
[[1 2 3 4 5]]
实例 4
dtype 参数
import numpy as np
a = np.array([1, 2, 3], dtype = complex)
print (a)
输出结果如下:
[1.+0.j 2.+0.j 3.+0.j]
ndarray 对象由计算机内存的连续一维部分组成,并结合索引模式,将每个元素映射到内存块中的一个位置。内存块以行顺序(C样式)或列顺序(FORTRAN或MatLab风格,即前述的F样式)来保存元素。

0.4.1 python array和list区别

Python中的列表(list)和数组(array)主要有以下区别:

  1. 数据类型:列表可以包含不同类型的数据,如数字、字符串、其他列表等,而数组通常用于存储单一数据类型的元素。在Python的标准库中,数组是数值型数据的集合,而列表是更通用的数据结构。
  2. 创建方式:列表是Python的内置数据类型,可以直接使用方括号创建,如a = 。而数组通常需要导入标准库(如NumPy)才能使用,例如import numpy as np后,可以使用np.array()函数创建数组。
  3. 运算支持:列表不支持数学四则运算。而数组支持数学四则运算,特别适用于科学计算和需要高效数值处理的场景。
  4. 性能和优化:列表对于一般用途进行了优化,适合存储不同类型的元素,并提供了广泛的内置方法,如append()、remove()、insert()等。数组对数值计算进行了优化,通常在进行大规模数值运算时性能更好,但不像列表那样有丰富的内置方法。数组支持与数值数据相关的额外操作,如数组类型转换。
  5. 内存占用:列表中的每个元素都是一个独立的Python对象,相对占用更多的内存。而数组占用的内存更少,因为它们仅存储数值数据,并以更紧凑的方式存储。
  6. 用途:列表适用于多种数据类型和灵活的数据集合操作。数组更适用于进行科学计算或其他需要高效数值处理的任务。在Python中,当你需要高效的数值运算并且所有元素类型都相同时,可以选择使用array。而在需要存储不同类型的数据或者不需要高效数值运算时,使用list会更加灵活。

综上所述,列表和数组在Python中各有特点和应用场景,选择使用哪种数据结构取决于具体的需求和上下文。
实例1:
import numpy as np
L1 = [1, 2, 3.14, 4]
arr = np.array( (1, 2, ‘3.14’, 4) )
print(L1) # 列表可以存储任意的数据类型
print(arr)
输出结果如下:
[1, 2, 3.14, 4]
[‘1’ ‘2’ ‘3.14’ ‘4’]


实例2:
import numpy as np
L1=[11,22,33,44]
L2=[100,200,300,400]
L1+L2 #列表之间用"+"只能拼接,而不能相加
输出结果如下:
[11, 22, 33, 44, 100, 200, 300, 400]


实例3.
如果同一个变量名重复出现,则以最后一个数组输入的值为输出值,之前输入的不再输出

  1. arr2=np.array(L1)
    arr2
    输出结果如下:
    array([11, 22, 33, 44])

  2. arr3=np.array(L2)
    arr3
    输出结果如下:
    array([100, 200, 300, 400])
    列表不支持数学四则运算,而数组支持数学四则运算

  3. arr2+arr3
    输出结果如下:

  4. array([111, 222, 333, 444]) # 数组支持四则运算
    arr2*arr3
    输出结果如下:

  5. array([ 1100, 4400, 9900, 17600])
    arr2/arr3
    输出结果如下:
    array([0.11, 0.11, 0.11, 0.11])


    list与ndarry加法示例:
    在这里插入图片描述
    list与ndarry乘法示例
    在这里插入图片描述

0.5 NumPy 创建数组

ndarray 数组除了可以使用底层 ndarray 构造器来创建外,也可以通过以下几种方式来创建。

0.5.1 创建相同值的数组

函数:
在这里插入图片描述


numpy.zeros_like(a, dtype=None, order=‘K’, subok=True, shape=None)
numpy.ones_like(a, dtype=None, order=‘K’, subok=True, shape=None)在这里插入图片描述
在这里插入图片描述
• 参数
– shape: 指定形状,整数或者整数序列
– dtype: 数据类型


1.1 创建指定大小的数组,数组元素以 0 来填充:
numpy.zeros(shape, dtype = float, order = ‘C’)


import 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)


输出结果为:
[0. 0. 0. 0. 0.]
[0 0 0 0 0]
[[(0, 0) (0, 0)]
[(0, 0) (0, 0)]]
1.2 np.zeros(10,dtype=int)
输出结果为:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
np.zeros((2,5),dtype=int)
输出结果为:
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
np.zeros((2,3,4),dtype=int)
输出结果为:
array([[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]],


[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]])


注:. numpy.zeros_like
*numpy.zeros_like 用于创建一个与给定数组具有相同形状的数组,数组元素以 0 来填充。
numpy.zeros 和 numpy.zeros_like 都是用于创建一个指定形状的数组,其中所有元素都是 0。
它们之间的区别在于:numpy.zeros 可以直接指定要创建的数组的形状,而 numpy.zeros_like 则是创建一个与给定数组具有相同形状的数组。
numpy.zeros_like(a, dtype=None, order=‘K’, subok=True, shape=None)
在这里插入图片描述
import numpy as np
创建一个 3x3 的二维数组
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
创建一个与 arr 形状相同的,所有元素都为 0 的数组
zeros_arr = np.zeros_like(arr)
print(zeros_arr)
输出结果为:
[[0 0 0]
[0 0 0]
[0 0 0]]

2.1 创建指定形状的数组,数组元素以 1 来填充: numpy.ones(shape, dtype = None, order = ‘C’)


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


输出结果为:
[1. 1. 1. 1. 1.]
[[1 1]
[1 1]]
2.2 使用numpy.ones() 函数,创建全为1的一维数组
np.ones(10)
输出结果为:
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
创建 2行 5列的二维数组,值是全为 0 的整数
np.ones((2,5),dtype=int)
输出结果为:
array([[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]])
*numpy.ones_like
numpy.ones_like 用于创建一个与给定数组具有相同形状的数组,数组元素以 1 来填充。
numpy.ones 和 numpy.ones_like 都是用于创建一个指定形状的数组,其中所有元素都是 1。
它们之间的区别在于:numpy.ones 可以直接指定要创建的数组的形状,而 numpy.ones_like 则是创建一个与给定数组具有相同形状的数组。
在这里插入图片描述
import numpy as np
创建一个 3x3 的二维数组
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
创建一个与 arr 形状相同的,所有元素都为 1 的数组
ones_arr = np.ones_like(arr)
print(ones_arr)
输出结果为:
[[1 1 1]
[1 1 1]
[1 1 1]]


3.1创建全为fill_value的数组
创建 2行 5列的二维数组,值是全为 5 的整数
np.full((2,5),5,dtype=int)
输出结果为:
array([[5, 5, 5, 5, 5],
[5, 5, 5, 5, 5]])
0.5.2 根据已有数据创建相同维度的数组
函数:
在这里插入图片描述
参数
– object: 一个数组或形状类似数组的结构,如列表等
– dtype: 数据类型


L5=([100,200,300],[400,500,600])
arr5=np.array(L5)
arr5
输出结果为:
array([[100, 200, 300],
[400, 500, 600]])

0.5.2 创建等差数列的一维数组

  1. numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:
    numpy.arange(start, stop, step, dtype)
    在这里插入图片描述实例1:
    import numpy as np
    x = np.arange(5)
    print (x)
    输出结果如下:
    [0 1 2 3 4]
    实例2:
    设置返回类型位 float:
    import numpy as np
    设置了 dtype
    x = np.arange(5, dtype = float)
    print (x)
    输出结果如下:
    [0. 1. 2. 3. 4.]
    实例3:
    import numpy as np
    x = np.arange(10,20,2)
    print (x)
    输出结果如下:
    [10 12 14 16 18]
  2. numpy.linspace
    numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:
    np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
    在这里插入图片描述实例1:
    import numpy as np
    a = np.linspace(1,10,10)
    print(a)
    输出结果为:
    [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
    实例2:
    将 endpoint 设为 false,不包含终止值:
    import numpy as np
    a = np.linspace(10, 20, 5, endpoint = False)
    print(a)
    输出结果为:
    [10. 12. 14. 16. 18.]
    实例3:
    如果将 endpoint 设为 true,则会包含 10。
    以下实例设置间距。
    import numpy as np
    a =np.linspace(1,10,10,retstep= True)
    print(a)
    拓展例子
    b =np.linspace(1,10,10).reshape([10,1])
    print(b)
    输出结果为:
    (array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]), 1.0)
    [[ 1.]
    [ 2.]
    [ 3.]
    [ 4.]
    [ 5.]
    [ 6.]
    [ 7.]
    [ 8.]
    [ 9.]
    [10.]]
    在这里插入图片描述3. numpy.logspace
    numpy.logspace 函数用于创建一个于等比数列。格式如下:
    np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
    在这里插入图片描述实例1:
    import numpy as np
    默认底数是 10
    a = np.logspace(1.0, 2.0, num = 10)
    print (a)
    输出结果为:
    [ 10. 12.91549665 16.68100537 21.5443469 27.82559402
    35.93813664 46.41588834 59.94842503 77.42636827 100. ]
    实例2:
    将对数的底数设置为 2 :
    import numpy as np
    a = np.logspace(0,9,10,base=2)
    print (a)
    输出结果为:
    [ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]

0.5.3 数据类型对象 (dtype)

type(“hello”)
输出结果为:
str

0.5.4 用随机函数创建数组

Python中用于生成随机数的主要库是random。以下是一些常用的随机函数及其使用示
在这里插入图片描述例:

  1. random.random():返回0到1之间的随机浮点数。
    import random
    print(random.random()) # 输出类似于 0.3290365574660254
    注:若设定特定的随机种子值(即:seed),则多次运行后产生的随机数是一致的;不设置随机种子seed,则多次运行后产生的随机数是不同的。
  2. 生成10 个均匀分布的 0 ~ 1 之间的随机小数
    np.random.rand(10)
    输出结果为:
    array([0.85369998, 0.25445758, 0.82786031, 0.49905511, 0.25214636,
    0.60636842, 0.77064648, 0.55058426, 0.18577198, 0.3595078 ])
  3. 生成 10 期望值 u 为 0,标准差为1的十个 正态分布的小数
    np.random.randn(10)
    输出结果为:
    array([-3.43323405e-04, 3.32578014e-01, 2.28620543e-01, -7.99316885e-01,
    3.00933059e+00, 8.31727251e-01, -6.51723579e-01, 5.71336440e-01,
    3.05262711e-01, 4.26792578e-01])
    生成 10 期望值 u 为 0,标准差为1的 2行5列 正态分布的小数
    np.random.randn(2,5)
    输出结果为:
    array([[-1.8159595 , -0.22650128, -0.34401613, 0.19192179, 2.12796067],
    [ 0.87400168, -0.33826335, -0.3707549 , -0.65123947, -0.51558185]])
  4. 生成 模拟8次掷骰子的结果
    np.random.randint(1,7,8)
    输出结果为:
    array([6, 5, 6, 2, 5, 4, 2, 1])
    生成 5 ~ 10 范围内均匀分布的8个随机小数
    np.random.uniform(5,10,8)
    输出结果为:
    array([7.70652673, 6.55819735, 7.04376205, 7.82413751, 9.86539273,
    8.86520164, 5.09117129, 5.20055258])
  5. 模拟生成 10 个人的身高,期望值u是173厘米,标准差是5
    np.random.normal(173,5,10)
    输出结果为:
    array([167.57184698, 177.98672723, 174.41489249, 165.46852643,
    170.10699874, 181.25718269, 160.86660378, 170.85543686,
    179.32968129, 168.66629799])
    均匀分布和正态分布:
    在这里插入图片描述

0.5.5 ndarray数组属性

ndarray.dtype 元素类型
ndarray.ndim 数组维度
ndarray.shape 数组形状
ndarray.size 元素个数 等价于 len(list)
ndarray数组属性示例:
在这里插入图片描述

0.5.6 修改数组类型

在这里插入图片描述

修改数组类型示例
在这里插入图片描述

0.5.7 修改数组维度

arr.reshape(shape) 生成新形状的数组并返回
arr.resize(shape) 不复制,改变当前数组形状
numpy.ravel(ndarray) 展开数组,变成1维数组
参数
– shape: 指定形状,整数或者整数序列
– ndarray: ndarray 数组
在这里插入图片描述

0.5.8 ndarray的运算

在这里插入图片描述

数组对应位置可以互相进行四则运算
运算符:+ - * / // % **

0.5.9 ndarray的广播运算

当一个数组a与另外一个数组b 的维度不相同时。默认进行广播运算
(broadcast)
在这里插入图片描述
在这里插入图片描述

0.5.10 ndarray的索引和切片运算

• ndarray对象的内容可以通过索引或切片来访问和修改,用法与Python
中 列表list 的索引和切片操作一样。
• 对于二维或者多维数组,索引和切片可以写在一个中括号内来一次性完
成。
• 语法
一维数组[索引或切片]
二维数组[第一个维度(行)索引或切片, 第二个维度(列)索引或切片]
三维数组[第一个维度(页), 第二个维度(行), 第三个维度(列)]

0.5.10.1一维数组的索引和切片示例:

实例:
import numpy as np
a = np.arange(10)
s = slice(2,7,2) # 从索引 2 开始到索引 7 停止,间隔为2
print (a[s])
输出结果为:
[2 4 6]


以上实例中,我们首先通过 arange() 函数创建 ndarray 对象。 然后,分别设置起始,终止和步长的参数为 2,7 和 2。
我们也可以通过冒号分隔切片参数 start:stop:step 来进行切片操作:
import numpy as np
a = np.arange(10)
b = a[2:7:2] # 从索引 2 开始到索引 7 停止,间隔为 2
print(b)
输出结果为:
[2 4 6]


在这里插入图片描述

0.5.10.2 二维数组的索引和切片示例

在这里插入图片描述

0.5.11 NumPy 高级索引

整数数组索引
整数数组索引是指使用一个数组来访问另一个数组的元素。这个数组中的每个元素都是目标数组中某个维度上的索引值。
以下实例获取数组中 (0,0),(1,1) 和 (2,0) 位置处的元素。


实例
import numpy as np
x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[[0,1,2], [0,1,0]]
print (y)
输出结果为:
[1 4 5]


以下实例获取了 4X3 数组中的四个角的元素。 行索引是 [0,0] 和 [3,3],而列索引是 [0,2] 和 [0,2]。
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print (‘我们的数组是:’ )
print (x)
print (‘\n’)
rows = np.array([[0,0],[3,3]])
cols = np.array([[0,2],[0,2]])
y = x[rows,cols]
print (‘这个数组的四个角元素是:’)
print (y)
输出结果为:
我们的数组是:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
这个数组的四个角元素是:
[[ 0 2]
[ 9 11]]
返回的结果是包含每个角元素的 ndarray 对象。


可以借助切片 : 或 … 与索引数组组合。如下面例子:
实例
import numpy as np
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b = a[1:3, 1:3]
c = a[1:3,[1,2]]
d = a[…,1:]
print(b)
print©
print(d)
输出结果为:
[[5 6]
[8 9]]
[[5 6]
[8 9]]
[[2 3]
[5 6]
[8 9]]


布尔索引
我们可以通过一个布尔数组来索引目标数组。
布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。
以下实例获取大于 5 的元素:
实例
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print (‘我们的数组是:’)
print (x)
print (‘\n’)
现在我们会打印出大于 5 的元素
print (‘大于 5 的元素是:’)
print (x[x > 5])
输出结果为:
我们的数组是:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
大于 5 的元素是:
[ 6 7 8 9 10 11]


以下实例使用了 ~(取补运算符)来过滤 NaN。
实例
import numpy as np
a = np.array([np.nan, 1,2,np.nan,3,4,5])
print (a[~np.isnan(a)])
输出结果为:
[ 1. 2. 3. 4. 5.]


以下实例演示如何从数组中过滤掉非复数元素。
实例
import numpy as np
a = np.array([1, 2+6j, 5, 3.5+5j])
print (a[np.iscomplex(a)])
输出结果为:
[2.0+6.j 3.5+5.j]


花式索引
花式索引指的是利用整数数组进行索引。
花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。
对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素,如果目标是二维数组,那么就是对应下标的行。
花式索引跟切片不一样,它总是将数据复制到新数组中。


一维数组
一维数组只有一个轴 axis = 0,所以一维数组就在 axis = 0 这个轴上取值:
实例
import numpy as np
x = np.arange(9)
print(x)
#一维数组读取指定下标对应的元素
print(“-------读取下标对应的元素-------”)
x2 = x[[0, 6]] # 使用花式索引
print(x2)
print(x2[0])
print(x2[1])
输出结果为:
[0 1 2 3 4 5 6 7 8]
-------读取下标对应的元素-------
[0 6]
0
6


二维数组
1、传入顺序索引数组
实例
import numpy as np
x=np.arange(32).reshape((8,4))
print(x)
#二维数组读取指定下标对应的行
print(“-------读取下标对应的行-------”)
print (x[[4,2,1,7]])
print (x[[4,2,1,7]]) 输出下表为 4, 2, 1, 7 对应的行,输出结果为:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]
[24 25 26 27]
[28 29 30 31]]
-------读取下标对应的行-------
[[16 17 18 19]
[ 8 9 10 11]
[ 4 5 6 7]
[28 29 30 31]]


传入倒序索引数组
实例
import numpy as np
x=np.arange(32).reshape((8,4))
print (x[[-4,-2,-1,-7]])
输出结果为:
[[16 17 18 19]
[24 25 26 27]
[28 29 30 31]
[ 4 5 6 7]]


3、传入多个索引数组(要使用 np.ix_)
np.ix_ 函数就是输入两个数组,产生笛卡尔积的映射关系。
笛卡尔乘积是指在数学中,两个集合 X 和 Y 的笛卡尔积(Cartesian product),又称直积,表示为 X×Y,第一个对象是X的成员而第二个对象是 Y 的所有可能有序对的其中一个成员。
例如 A={a,b}, B={0,1,2},则:
A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}
实例
import numpy as np
x=np.arange(32).reshape((8,4))
print (x[np.ix_([1,5,7,2],[0,3,1,2])])
输出结果为:
[[ 4 7 5 6]
[20 23 21 22]
[28 31 29 30]
[ 8 11 9 10]]

0.5.12 ndarray的掩码数组

什么是掩码数组:
• 在许多情况下,数据集可能存在不完整或无效数据,numpy引入掩码数
组提供标记数据的方法,此方法在一个数组内使用True/False类型的数
据可以标记数据是否有效。
• 使用数组掩码可以快速的对数据进行筛选和修改。
ndarray的掩码数组示例在这里插入图片描述

ndarray的掩码数组的生成
在这里插入图片描述

0.5.12.1ndarray的掩码数组的布尔运算

在这里插入图片描述

ndarray的掩码数组的布尔运算示例1
在这里插入图片描述
在这里插入图片描述

ndarray的掩码数组的布尔运算示例2
在这里插入图片描述

0.6 Numpy常用函数

0.6.1算数函数

在这里插入图片描述

算数函数示例1
在这里插入图片描述

0.6.2 统计函数

在这里插入图片描述

np.sum函数代码示例
在这里插入图片描述
统计函数代码示例1
在这里插入图片描述
统计函数代码示例2
在这里插入图片描述

0.6.3 其他函数

在这里插入图片描述

where函数示例
在这里插入图片描述
apply_along_axis函数示例
在这里插入图片描述

0.7 numpy 其他参考链接

https://www.numpy.org.cn/user/basics/types.html
https://www.runoob.com/numpy/numpy-tutorial.html

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值