NumPy
一、导入模块
import numpy as np #为了方便使用numpy 采用np简写
二、列表转化为矩阵
array = np.array([[1,2,3],[2,3,4]]) #列表转化为矩阵
三、NumPy的属性
- ndim:维度
- shape:行数和列数
- size:元素个数
四、数组创建
(1)创建
a = np.array([2,23,4]) # list 1d
# [2 23 4]
(2)指定数据dtype
a = np.array([2,23,4],dtype=np.int)
print(a.dtype)
# int32
a = np.array([2,23,4],dtype=np.int32)
print(a.dtype)
# int32
a = np.array([2,23,4],dtype=np.float)
print(a.dtype)
# float64
a = np.array([2,23,4],dtype=np.float32)
print(a.dtype)
# float32
(3)创建特定数据
-
矩阵
a = np.array([[2,23,4],[2,32,4]]) # 2d 矩阵 2行3列 print(a) """ [[ 2 23 4] [ 2 32 4]] """
-
创建全零数组(numpy.zeros)
a = np.zeros((3,4)) # 数据全为0,3行4列 """ array([[ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.]]) """
-
创建全一数组(numpy.ones), 同时也能指定这些特定数据的 dtype
a = np.ones((3,4),dtype = np.int) # 数据为1,3行4列 """ array([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]) """
-
创建全空数组(numpy.empty), 其实每个值都是接近于零的数(并不是0)
a = np.empty((3,4)) # 数据为empty,3行4列 """ array([[ 0.00000000e+000, 4.94065646e-324, 9.88131292e-324, 1.48219694e-323], [ 1.97626258e-323, 2.47032823e-323, 2.96439388e-323, 3.45845952e-323], [ 3.95252517e-323, 4.44659081e-323, 4.94065646e-323, 5.43472210e-323]]) """
-
创建连续数组(numpy.arrange)
a = np.arange(10,20,2) # 10-19 的数据,2步长 """ array([10, 12, 14, 16, 18]) """
-
改变数据的形状(numpy.reshape)
a = np.arange(12).reshape((3,4)) # 3行4列,0到11 """ array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) """
-
创建线段型数据(numpy.linspace)
a = np.linspace(1,10,20) # 开始端1,结束端10,且分割成20个数据,生成线段 """ array([ 1. , 1.47368421, 1.94736842, 2.42105263, 2.89473684, 3.36842105, 3.84210526, 4.31578947, 4.78947368, 5.26315789, 5.73684211, 6.21052632, 6.68421053, 7.15789474, 7.63157895, 8.10526316, 8.57894737, 9.05263158, 9.52631579, 10. ]) """
五、基础运算
(1)加(+)
c=a+b
(2)减(-)
c=a-b
(3)乘(*)(对应元素)
c=a*b
(4)乘方(**)
c=b**2
(5)数学函数
c=10*np.sin(a)
(6)标准的矩阵乘法运算(即对应行乘对应列得到相应元素)(两种方法)
c_dot = np.dot(a,b)
c_dot_2 = a.dot(b)
(7)print逻辑判断
print(b<3)
(8)随机生成(random)
a=np.random.random((2,4))
(9)对矩阵元素进行求和
np.sum(a)
(10)寻找矩阵中的最大值
np.max(a)
(11)寻找矩阵中的最小值
np.min(a)
(12)对行或列单独操作(axis,当axis的值为0的时候,将会以列作为查找单元, 当axis的值为1的时候,将会以行作为查找单元。)
print("sum =",np.sum(a,axis=1))
print("min =",np.min(a,axis=0))
print("max =",np.max(a,axis=1))
(13)求矩阵最小元素的索引(argmin())
numpy.argmin(矩阵名))
(14)求矩阵最大元素的索引(argmax())
numpy.argmax(矩阵名)
(15)求矩阵的均值(mean()、average())
numpy.mean(矩阵名)# 或
矩阵名.mean()
numpy.average()
(16)求矩阵中位数(median())
矩阵名.median()
(17)累加函数(cumsum())
在cumsum()函数中:生成的每一项矩阵元素均是从原矩阵首项累加到对应项的元素之和。比如元素9,在cumsum()生成的矩阵中序号为3,即原矩阵中2,3,4三个元素的和。
numpy.cumsum(矩阵名)
(18)累差运算函数(diff)
该函数计算的便是每一行中后一项与前一项之差。故一个3行4列矩阵通过函数计算得到的矩阵便是3行3列的矩阵。
numpy.diff(矩阵名)
(19)nonzero()函数
这个函数将所有非零元素的行与列坐标分割开,重构成两个分别关于行和列的矩阵。(就是拆出每个数在矩阵中的位置)
numpy.nonzero(矩阵名)
(20)矩阵的排序
这里的排序函数仍然仅针对每一行进行从小到大排序操作
numpy.sort(矩阵名)
(21)矩阵的转置
numpy.transpose(矩阵名)
矩阵名.T
(22)clip()函数
这个函数的格式是clip(Array,Array_min,Array_max),顾名思义,Array指的是将要被执行用的矩阵,而后面的最小值最大值则用于让函数判断矩阵中元素是否有比最小值小的或者比最大值大的元素,并将这些指定的元素转换为最小值或者最大值。
六、索引
(1)一维索引
矩阵名[索引位置]
(2)二维索引
矩阵名[行索引,列索引]
矩阵名[行索引][列索引]
(3)切片
矩阵名[:,1] #第一列的所有数
矩阵名[1,1:3] #第一行第一列到第二列
(4)打印
-
逐行打印
for row in A: print(row)
-
逐列打印
for column in A.T: print(column)
(5)展开
flatten是一个展开性质的函数,将多维的矩阵进行展开成1行的数列。
矩阵名.flatten()
(6)迭代输出
for item in A.flat:
print(item)
七、array合并
(1)上下合并(vertical stack)(numpy.vstack())
numpy.vstack((A,B))
(2)左右合并(horizontal stack)
numpy.hstack((A,B))
(3)序列的转置(np.newaxis() )
A[np.newaxis,:] #加一行维度
A[:,np.newaxis] #加一列维度
(4)多个矩阵或序列的合并(可以指定某个维度)
numpy.concatenate((A,B,B,A),axis=0)
numpy.concatenate((A,B,B,A),axis=1)
八、array的分隔
(1)纵向分割
numpy.split(A, **2**, axis=1) #按列分成**2**块
(2)横向分割
numpy.split(A, **3**, axis=0) #按列分成**3**块
(3)不等量分割(就是对行或列不能平均分的情况)
numpy.array_split(A, 3, axis=1)
(4)更简单的分割(对应合并)
numpy.vsplit(A, 3) #纵向分割 等于 print(np.split(A, 3, axis=0))
numpy.hsplit(A, 2) #横向分割 等于 print(np.split(A, 2, axis=1))
九、array的赋值
(1) =赋值
b = a
c = a
d = b
b、c、d就是a
确认a和b是否是同一个变量:b is a
(2)copy赋值(deep copy) 单纯的赋值,没有关联
b=a.copy()
**copy() 的赋值方式没有关联性 **