目录

  • 1. numpy.ndarray 数组的基本命令
  • 创建数组
  • 数组的属性
  • 数组的数据类型
  • 数组的变形
  • 创建有规律的数组
  • 用 numpy.random 的随机函数创建随机数的数组
  • 堆叠数组
  • 数组的比较运算和逻辑运算
  • 数组的访问
  • 2. 数组的运算
  • 算术运算
  • 多维数组运算常用函数
  • 多维数组统计运算函数
  • 矩阵运算
  • 数组的排序
  • 求范数
import numpy as np

1. numpy.ndarray 数组的基本命令

创建数组

numpy.array( object, dtype=None, ndmin=0 )

参数:
object:可被转换成数组的其它数据对象。比如列表。
dtype:表示数组所需的数据类型。缺省情况下根据 object 自动判断。
ndmin:指定生成数组的最小维度。缺省情况下根据 object 自动判断。

注: 数组转换为列表的方法

ndarry.tolist()

数组的属性

属性

说明

ndim

整数, 多维数组敕数元维数

shape

多维数组的尺寸, 例如 n 行 m 列的数组的形状为 (n,m)

size

多维数组总的元素个数

dtype

整数, 数组中每个元素所占字节数

itemsize

数组元素消耗的总字牧组娄敖

nbytes

数据类型

数组的数据类型

bool: 布尔类型 (True, False);
int: 整数;
uint:无符号整数;
unicode_:字符串, 相当于 python 的 str;
float:浮点数;
complex:复数。

数据类型的转化:

arr1 = arr1
#返回整个数组数据类型变换后产生的新数组
arr2 = np.float16(arr1) #原始数组不变
arr3 = arr1.astype(float) #等效于单独的类型构造器 np.float64()

数组的变形

#ndarry的reshape()方法:
newndarray = ndarray.reshape ( new_shape ) 
#将多维数组重新变形后返回,原始数组保存不变。

#ndarray的shape属性:
ndarray.shape = new_shape
#可直接改变数组的shape属性,数组本身被直接变形。

#ndarry的resize()方法:
ndarray.resize ( new_shape )
#直接修改数组的形状,数组本身被直接变形。

注:

  • 如果 new_shape 的行列定义所形成的数组个数与原有数组成员个数不匹配,将引发异常。
  • (-1,) 作为 new_shape,代表1维,而不用指明1维中元素的个数。

创建有规律的数组

(1) arange 函数

numpy.arange ( [start], end, [step], dtype=None )

返回:一维数组。
参数:用法类似 range,区别在于各个参数可以是浮点型的。可指定 dtype,也可由各参数自动决定。

(2) linspace 函数创建等间隔一维数组

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

参数:
start:起始的值(整数或者浮点数),闭区间。
end:结束的值(整数或者浮点数),缺省闭区间。
num:表示在这个区间里生成数字的个数。生成的数组是等间隔的。
endpoint:为 True 时,end 为闭区间,否则为开区间。
注意: 通常无论 startend 为整型还是浮点型,返回的数组各元素数据类型总是为浮点类型的,除非指定 dtype

(3) 创建特殊数组

#创建全为 0. 的 m*n 维数组 (float):
print(np.zeros((m,n)))

#创建对角线为 1. 的 n 维单位矩形 (float):
print(np.eye(n))

#创建对角线指定值 a1,...,an 的单位矩形 (int):
print(np.diag([a1,...,an]))

#创建值为 1. 的 m*n 维数组 (float):
print(np.ones((m,n)))

#创建相同数字的数组
print(np.full((m,n),10))

用 numpy.random 的随机函数创建随机数的数组

函数

描述

rand(*args)

随机产生一组 [0,1) 之间的浮点值数组

randint(start,end,size)

随机产生一组 [start,end) 之间的整数值数组

uniform(start,end,size)

随机产生一组 [start,end) 服从均匀分布的浮点值数组

normal(loc, scale, size)

随机产生一组给定均值 (loc) 和方差 (scale) 的服从正态分布的浮点值数组

注:rand 函数中,只提供一个整型参数时,定义一维数组的长度;提供两个参数时,定义一个二维数组的 shape;在后三个函数中,size 可以是一个整数,定义一维数组的长度;可以是一个元组,定义一个二维数组的 shape

堆叠数组

# 按垂直方向(行顺序)堆叠数组构成一个新的数组:
xn=np.vstack([a1,a2,...,an])
# 按水平方向(列顺序)堆叠数组构成一个新的数组:
yn=np.hstack([b1,b2,...,bn])

数组的比较运算和逻辑运算

比较运算符: >、<、>=、<=、==、!=

这些运算符对两个 numpy 数组进行运算,得到的结果是一个与原数组形状相同的 bool 数组,其中的值等于原数组中对应位置进行比较得到的逻辑值(TrueFalse)。

逻辑运算符和函数: (运算过程与比较运算相似)

与:numpy.logical_and (),可用 & 替代。
或:numpy.logical_or (),可用 | 替代。
非:numpy.logical_not (),可用 ~ 替代。

数组的访问

(1) 数组[行, 列]

注:

  • 用离散、单个方式组合访问多维数组,结果为一维数组
arr1[[0,1],[0,2]] #第 0行的第 0列元素,第 1行的第 2列元素,行列一一对应
arr1[[0,1,0],[0,2,1]] #第 0行第 0列,第 1行第 2列,第 0行的第 1列,行列一一对应
  • 带有切片的访问,可能生成多维数组

切片+切片、切片+离散 访问二维数组,结果为一矩形的二维数组

(2) 使用掩码数组作为下标选择所需数据元素

  • 通过逻辑表达式,对数组的每一个元素进行计算,得到与原数组相同形状的逻辑值掩码数组;
  • 用访问原数组元素的下标表示法,将上述逻辑值掩码数组作为下标放入中括号 [ ] 中(作为一个掩码 mask),便可提取与逻辑掩码数组的每个 True 值一一对应的原数组各元素。

(3) 使用where函数获取数组中值为True元素的下标

#where函数返回数组中值为True元素的各维下标数组组成的元组
xyPos=np.where((a>=5) & (a<=9))

运行结果类似:

(array([0, 1, 2], dtype=int64), array([0, 1, 0], dtype=int64))

2. 数组的运算

算术运算

(1) 相同形状的数组的算术运算: +、-,各个对应的元素分别运算。

(2) 数组与标量的算术运算: +、-、*、/、 //、**,多维数组运算是同维数组相应位置的两个元素的运算,Python 使用 “广播机制” 处理不同维运算。单个标量会扩展为与其运算的数组一样的形状,再逐一运算。

(3) 二维数组与一维数组的运算: 二维数组与一维数组的运算时,两个数组的列数要一致,一维数组根据“广播机制”扩展行数,再逐一计算。

多维数组运算常用函数

函数

描述

absfabs

计算各元素的绝对值

sqrt

计算各元素的平方根,相当于 **0.5

square

计算各元素的平方,相当于 **2

exp

计算各元素的指数

loglog10

计算各元素的自然对数

sign

计算各元素的正负号

ceil

计算各元素的大于或等于该元素的最小整数

floor

计算各元素的小于或等于该元素的最大整数

cossintan

三角函数

mod

求模运算,相当于 % 运算符

equalnot_equal

比较两个数组对应元素是否相等,返回布尔型数组,相当于 == 和 !=

多维数组统计运算函数

函数

描述

sum

沿着指定轴方向求总和并返回

prod

沿着指定轴方向求累积并返回

mean

沿着指定轴方向求算术平均值并返回

minmax

沿着指定轴方向求最大值和最小值并返回

argminargmax

沿着指定轴方向求最大值和最小值的索引并返回

cumsum

沿着轴方向从头开始逐个累加各元素,返回累加过程数组

cumprod

沿着指定轴方向从头开始累积,返回累积过程数组

注:

  • 所有 numpy 函数同时也是 ndarray 数组的方法;
  • 二维数据拥有两个轴:所有函数都有的 axis 形参设置轴的方向:axis=0,垂直往下计算;axis=1,从左到右水平方向延伸计算;缺省 (None) 则所有元素合并成一行 (一维) 后计算。

例如

a=a
Max=np.max(a) # np 的函数。缺省轴方向,则所有元素连成一行
Min=a.min() # ndarray 的方法
maxOfRow=a.max(axis=1) # ndarray 的方法,每行最大值
minOfCol=np.min(a,axis=0) # np 的函数,每列最小值

矩阵运算

print('矩阵加法:\n',a+b)
print("转置矩阵:\n",a.T)
print("两个矩阵中元素一一对应相乘或通过广播后一一对应相乘:\n",a*b)
print("两个形状相同的矩阵中元素一一对应相乘:\n",np.multiply(a, b))
print("一维数组的点乘或二维矩阵的矩阵乘法:\n",np.dot(a, b)) # 等同于 a@b
print("矩阵乘法:\n",np.matmul(a, b))
print("求逆矩阵:\n",np.linalg.inv(a))

数组的排序

(1) sort函数:

numpy.sort ( a, axis=-1, kind=None, order=None)
  • a:所需排序的数组
  • axis:数组排序时的方向轴
  • 0:垂直方向排序
  • 1:水平方向排序
  • -1:按最后的轴排序(缺省值)
  • None:全部展开后排序成一维数组
  • kind:数组排序时使用的方法:
  • “quicksort”:快排(缺省值)
  • “mergesort”:混排
  • “heapsort”:堆排
  • “stable”:稳定排
  • order:提供一个字符串或列表,当 a 是定义了字段的数组时,此参数列表指定按第一个、第二个……字段进行排序。

(2) argsort 函数

numpy.argsort ( a, axis=-1, kind=None, order=None)

参数:与 sort 函数相同
返回:排序后的索引值(下标)

求范数

x_norm = np.linalg.norm(x, ord=None, axis=None, keepdims=False)

参数:

  • x: 矩阵或数组
  • ord:范数类型
  • 向量的范数:ord=n 表示 python入参类型为数组 python以数组为参数的函数_python 范数, 缺省 python入参类型为数组 python以数组为参数的函数_python_02 范数, python入参类型为数组 python以数组为参数的函数_数组_03 范数为 ord=np.inf
  • 矩阵的范数:
  • ord=1:列和的最大值,
  • ord=2:$ \left| \lambda E - A^T A \right|=0$ ,求特征值,然后求最大特征值得算术平方根,
  • ord=np.inf:行和的最大值,
  • ord=None:缺省,求整体的矩阵元素平方和,再开根号
  • axis: 处理类型: axis=1 表示按行向量处理,求多个行向量的范数, axis=0 表示按列向量处理,求多个列向量的范数, axis=None 表示矩阵范数
  • keepding: 是否保持矩阵的二维特性, True 表示保持矩阵的二维特性, False 相反