Numpy

文章目录

  • numpy基础运算
    • axis
  • numpy的索引
  • numpy array合并
  • numpy分割
  • numpy copy & deep copy

numpy基础运算

import numpy as np
array=np.array([[1,2,3],[2,3,4]]) # 用array将列表转化成数组
print(array) #矩阵
[[1 2 3]
 [2 3 4]]
array.ndim # 数组维度
2
array.shape #(行数,列数)
(2, 3)
array.size #元素
6
a = np.array([2,23,4], dtype=np.int64) #a的数据类型
a.dtype
dtype('int64')
a=np.array([[1,2,3],[2,3,4]])
a
array([[1, 2, 3],
       [2, 3, 4]])
a1 = np.zeros((3,4))
a1
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
a2 = np.ones((3,4),dtype=np.int32)
a2
array([[1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]])
a3 = np.empty((3,4),dtype=np.int32)
a3
array([[1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]])
a4=np.arange(12)
a4
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
a4=np.arange(12).reshape(3,4) #reshape设定行数和列数
a4
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
a5 = np.linspace(1,10,6)  #在[1,10)生成6段
a5
array([ 1. ,  2.8,  4.6,  6.4,  8.2, 10. ])
a5 = np.linspace(1,10,6).reshape(2,3)  #在[1,10)生成五段
a5
array([[ 1. ,  2.8,  4.6],
       [ 6.4,  8.2, 10. ]])
a = np.array([10,20,30,40])
b = np.arange(4)
a,b
(array([10, 20, 30, 40]), array([0, 1, 2, 3]))
c = a-b #数组减法
c
array([10, 19, 28, 37])
c=b**2
c
array([0, 1, 4, 9])
c=10*np.sin(a)
c
array([-5.44021111,  9.12945251, -9.88031624,  7.4511316 ])
d1=b<3
d2=b==3
d1,d2
(array([ True,  True,  True, False]), array([False, False, False,  True]))
a=np.array([[1,1],[2,3]])
b=np.arange(4).reshape((2,2))
a,b
(array([[1, 1],
        [2, 3]]),
 array([[0, 1],
        [2, 3]]))
c=a*b #算数乘法
c
array([[0, 1],
       [4, 9]])
c2 = np.dot(a,b) # 矩阵乘法
print(c2)
[[ 2  4]
 [ 6 11]]
c2 = a.dot(b) #另一种乘法方式
c2
array([[ 2,  4],
       [ 6, 11]])
a = np.random.random((2,4)) #随机生产二行四列矩阵   radom模块下,random方法
a
array([[0.43285409, 0.59119159, 0.13123502, 0.26843777],
       [0.01975319, 0.89322356, 0.96109008, 0.20043348]])
np.sum(a) #求和
3.498218778049299
np.max(a) #最大值
0.9610900820034279
np.sum(a,axis=1) #axis=1行数中求和
array([1.42371846, 2.07450032])
np.sum(a,axis=0) #axis=0列数中求和
array([0.45260728, 1.48441515, 1.0923251 , 0.46887125])

axis

  • axis的取值取决于数据的维度,如果数据是一维数组那么axis只有0,如果数据是二维的,那么axis可以取0和1,如果数据是三维的,那么axis就可以取0、1和2
  • axis=0表示沿着列的方向,做逐行的操作
  • axis=1表示沿着行的方向,做逐列的操作
  • axis=0表示行就是删除行,axis=1表示列就是删除列
A = np.arange(2,14).reshape((3,4))
A
array([[ 2,  3,  4,  5],
       [ 6,  7,  8,  9],
       [10, 11, 12, 13]])
np.argmin(A) # 最小值索引
0
np.argmax(A) # 最大值索引
11
a1=np.mean(A) #求取均值
a2=A.mean()
a1
a2
7.5
a3 = np.mean(A,axis=0) #删除行,队列求均值
a3
array([6., 7., 8., 9.])
b = np.median(A) #求取中位数 
b
7.5
c = np.cumsum(A) #前n项和求法
c
array([ 2,  5,  9, 14, 20, 27, 35, 44, 54, 65, 77, 90])
d = np.diff(A) #累差,第n+1-n个数
d
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])
e = np.nonzero(A) #输出非零行和非零列的索引
e
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64),
 array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
A = np.arange(14,2,-1).reshape((3,4))
A
array([[14, 13, 12, 11],
       [10,  9,  8,  7],
       [ 6,  5,  4,  3]])
np.sort(A) # 逐行排序
array([[11, 12, 13, 14],
       [ 7,  8,  9, 10],
       [ 3,  4,  5,  6]])
np.transpose(A) #矩阵转置,行变列,列变行
array([[14, 10,  6],
       [13,  9,  5],
       [12,  8,  4],
       [11,  7,  3]])
A.T #转置另一种写法
array([[14, 10,  6],
       [13,  9,  5],
       [12,  8,  4],
       [11,  7,  3]])
(A.T).dot(A)
array([[332, 302, 272, 242],
       [302, 275, 248, 221],
       [272, 248, 224, 200],
       [242, 221, 200, 179]])
np.clip(A,5,9) #小于5的数为5,大于5的数为9,其余保留
array([[9, 9, 9, 9],
       [9, 9, 8, 7],
       [6, 5, 5, 5]])

numpy的索引

import numpy as np
A = np.arange(3,15)
A
array([ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
A[3]
6
A = np.arange(3,15).reshape(3,4)
A
array([[ 3,  4,  5,  6],
       [ 7,  8,  9, 10],
       [11, 12, 13, 14]])
A[2] #索引行数
array([11, 12, 13, 14])
A[1,1] #第一行第一列
8
A[1][1] #第一行第一列,另一种表达方式
8
A[2,:]# 第2行所有数
array([11, 12, 13, 14])
A[:,1] #第一列所有数
array([ 4,  8, 12])
A[1,1:2]
array([8])
A[1,1:3]
array([8, 9])
for row in A: #迭代行
    print(row)
[3 4 5 6]
[ 7  8  9 10]
[11 12 13 14]
for col in A.T: #迭代列
    print(col)
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]
for item in A.reshape(1,12):
    print(item)
[ 3  4  5  6  7  8  9 10 11 12 13 14]
A.flatten() #将二维数组转换为1维数组
array([ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
A = np.arange(3,15).reshape(3,4)
A
array([[ 3,  4,  5,  6],
       [ 7,  8,  9, 10],
       [11, 12, 13, 14]])
for item in A.flat: #迭代数组元素
    print(item)
3
4
5
6
7
8
9
10
11
12
13
14

numpy array合并

A = np.array([1,1,1])
B = np.array([2,2,2])
A,B
(array([1, 1, 1]), array([2, 2, 2]))
C = np.vstack((A,B))# 上下合并
C
array([[1, 1, 1],
       [2, 2, 2]])
C.shape #合并数组形状
(2, 3)
D=np.hstack((A,B)) #左右合并
D
array([1, 1, 1, 2, 2, 2])
D.shape # 一维数组
(6,)
A[np.newaxis,:] #对一维数组在行上增加一个维度
array([[1, 1, 1]])
A[np.newaxis,:].shape
(1, 3)
A[:,np.newaxis] #对一维数组在列上增加一个维度
array([[1],
       [1],
       [1]])
A[:,np.newaxis].shape
(3, 1)
A = np.array([1,1,1])[:,np.newaxis]
B = np.array([2,2,2])[:,np.newaxis]
A,B
(array([[1],
        [1],
        [1]]),
 array([[2],
        [2],
        [2]]))
C = np.concatenate((A,B,B,A),axis=0) #确定横纵向的合并,在这删除行
C
array([[1],
       [1],
       [1],
       [2],
       [2],
       [2],
       [2],
       [2],
       [2],
       [1],
       [1],
       [1]])
C = np.concatenate((A,B,B,A),axis=1) #确定横纵向的合并,在这删除列
C
array([[1, 2, 2, 1],
       [1, 2, 2, 1],
       [1, 2, 2, 1]])

numpy分割

A = np.arange(12).reshape(3,4)
A
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
np.split(A,2,axis=1) #对列进行分割,分成两块
[array([[0, 1],
        [4, 5],
        [8, 9]]),
 array([[ 2,  3],
        [ 6,  7],
        [10, 11]])]
np.split(A,3,axis=0) #对行进行分割,分成三块
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
# split只进行相等量的分割
# numpy中进行不等量的分割用np.array_split,多了一个array_
np.array_split(A,3,axis=1) #对列进行分割,分成三块
[array([[0, 1],
        [4, 5],
        [8, 9]]),
 array([[ 2],
        [ 6],
        [10]]),
 array([[ 3],
        [ 7],
        [11]])]
np.vsplit(A,3)#横向分割
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
A
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
np.hsplit(A,2)#纵向分割
[array([[0, 1],
        [4, 5],
        [8, 9]]),
 array([[ 2,  3],
        [ 6,  7],
        [10, 11]])]

numpy copy & deep copy

a = np.arange(4)
a
array([0, 1, 2, 3])
b=a
c=a
d=b
a[0]=11
a
array([11,  1,  2,  3])
b
array([11,  1,  2,  3])
c
array([11,  1,  2,  3])
d[1:3]=[22,33]
d
array([11, 22, 33,  3])
a
array([11, 22, 33,  3])
b = a.copy() #deep copy 把a的值赋给b,但不改变b的属性
b
array([11, 22, 33,  3])
a[3]=44
b
array([11, 22, 33,  3])

你可能感兴趣的:(机器学习,numpy)