矩阵NumPy

 

安装:  pip install numpy   

    pip install numpy -i https://pypi.douban.com/simple      豆瓣镜像下载

 

常量:

np.pi  π

 

 

创建矩阵数组

 1 import numpy as np
 2 # array=np.array([[1,2,3],[5,6,7]])  #定义一个2行3列的矩阵数组.2行=2维
 3 # print(array.ndim) #返回矩阵数组的维数
 4 # print(array.shape) #返回矩阵数组的维数和列数。(2, 3)
 5 # print(array.size)  #返回矩阵数组的元素总个数
 6 #
 7 # array1=np.array([[1,2,3],[5,6,7]],dtype=np.int)  #定义一个矩阵数组
 8 # #dtype   指定每个元素的数据类型     可选
 9 # print(array1.dtype)  #返回元素的数据类型。int32
10 # array2=np.zeros((3,4)) #定义一个元素值都是0,3行4列的矩阵数组
11 # print(array2)
12 # array3=np.ones((3,4))  #定义一个元素值都是1,3行4列的矩阵数组
#参数2 可选
dtype="uint8" 指定每个数据的类型,默认浮点型
13 # print(array3)
14 #array4=np.empty((3,4))  #定义一个元素值都是空,3行4列的矩阵数组
15 #空  值非常接近0    6.23042070e-307
16 #print(array4)
17 #array5=np.arange(10,20,2)  #定义一个一维n列矩阵数组
18 #参数1 参数2 数据范围
19 # 参数3  步长值     [10 12 14 16 18]
20 #print(array5)
21 # array6=np.arange(10,33,2).reshape((3,4))  #定义一个3行4列的有序矩阵数组
22 # print(array6)
23 #array7=np.linspace(1,10,5) #定义一个一维数组
24 #元素值是:在1到10之间平均分成5个点。注意包括10
25 #[ 1.    3.25  5.5   7.75 10.  ]
26 #print(array7)
27 array8=np.linspace(1,10,6).reshape((2,3))  #定义一个2行3列的矩阵数组
28 print(array8)

i=np.zeros([4,6,3],np.uint8)      #元素值都是0,产生4个表,每个表是6行3列      np.uint8是数据类型

 

 

np.random.rand()     返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1

 

 

 

 

 

 

矩阵数组的运算:

矩阵乘法:

只有在第一个矩阵的列数和第二个矩阵的行数相同时才有意义

 

  1 import numpy as np
  2 a=np.array([1,2,3,4])
  3 b=np.arange(10,17,2)
  4 x=np.array([[1,2],[10,20]])
  5 y=np.arange(10,17,2).reshape((2,2))
  6 z=np.array([[1,2,3],[10,20,30]])
  7 c=a-b  #两个矩阵数组对应元素分别进行计算
  8 c=a**2
  9 c=np.sin(a)
 10 c=a<3  #[ True  True False False]
 11 c=x*y  #两个矩阵数组对应元素分别进行计算
 12 d=np.dot(x,y) #矩阵乘法[看上面的图]
 13 d=x.dot(y)  #矩阵乘法
 14 
 15 c=np.random.random((2,3))  #产生一个2行3列的随机数矩阵
 16 #每个元素的随机数在0到1之间
 17 c=np.min(x) #找出最小元素的值
 18 c=np.max(x)  #找出最大元素的值
 19 c=np.sum(z,axis=1)  #每一行求和  [ 6 60]
 20 c=np.sum(z,axis=0)  #每一列求和.[11 22 33]
 21 c=np.argmin(a) #最小值的索引
 22 c=np.argmax(z) #最大值的索引
 23 c=np.average(z)   #求全部元素的平均值
 24 c=np.median(z) #找出中位数
 25 #中位数:将数据按照从小到大或从大到小的顺序排列,如果数据个数是奇数,则处于最中间位置的数就是这组数据的中位数;如果数据的个数是偶数,则中间两个数据的平均数是这组数据的中位数
 26 c=np.cumsum(z)  #返回各元素与前面元素累加后的一维矩阵。[ 1  3  6 16 36 66]
 27 z=np.array([[100,2,3],[10,20,30]])
 28 c=np.diff(z)  #各维 后列减去前列后 的矩阵。[[-98   1]   [ 10  10]]
 29 z=np.array([[100,0,3],[10,20,30]])
 30 c=np.nonzero(z)  #找出非0元素的位置
 31 #(array([0, 0, 1, 1, 1], dtype=int64), array([0, 2, 0, 1, 2], dtype=int64))
 32 #第一个数组是非0元素的行索引,第二个数组是非0元素的列索引
 33 d=np.transpose(c)  #通过行列转换,返回相应的位置矩阵。[[0 0] [0 2] [1 0] [1 1] [1 2]]
 34 # 注意参数c的值
 35 d=z[c]  #找出相应位置元素的一维矩阵。[100   3  10  20  30]
 36 #注意参数c的值  c是位置元组
 37 c=np.sort(z) #对各维分别进行排序-升序。[[  0   3 100] [ 10  20  30]]
 38 z=np.array([[100,2,3,50],[10,20,30,15],[35,86,74,14]])
 39 c=np.transpose(z)  #行列转换,行变成列,列变成行
 40 # [[100  10] [  0  20] [  3  30]]
 41 c=z.T  #与np.transpose(z)相同
 42 c=np.clip(z,5,9)#矩阵z中小于5的元素都等于5,大于9的元素都等于9
 43 #参数2  最小值;参数3 最大值
 44 z=np.array([[10,2,3,50],[10,20,30,15]])
 45 c=np.mean(z)   #求所有元素的平均值
 46 c=z.mean()     #求所有元素的平均值
 47 c=np.mean(z,axis=1)  #各行求平均值。[16.25 18.75]
 48 c=np.mean(z,axis=0)  #各列求平均值。[10.  11.  16.5 32.5]
 49 c=a[1]  #返回一维矩阵索引号对应的值.3
 50 c=z[1]  #多维矩阵就返回行索引对应的矩阵。[10 20 30 15]
 51 c=z[1][1]  #返回第一行第一列的值
 52 c=z[1,1]   #返回第一行第一列的值
 53 c=z[1,:]  #返回第一行的所有元素。[10 20 30 15]
 54 # : 代表所有
 55 c=z[:,1] #返回第一列的所有元素。[ 2 20]
 56 c=z[1,1:3] #返回第一行的1到3的元素
 57 #注意  顾头不顾尾
 58 c=z[0:1,1]  #返回第一列的0到1的元素
 59 z=np.array([[10,2,3,50],[10,20,30,15],[100,500,200,800]])
 60 for r in z: #每次返回一行
 61     #print(r)
 62     pass
 63 for r in z.T: #每次返回一列
 64     #print(r)
 65     pass
 66 c=z.flat  #把矩阵转换成一维迭代器
 67 c=z.flatten()  #把矩阵转换成一维矩阵
 68 for i in z.flat: #每次返回一个元素
 69     #print(i)
 70     pass
 71 a=np.array([[1,2,3,4],[60,20,90,10]])
 72 b=np.array([[500,200,800,444],[2,2,2,2]])
 73 c=a.shape  #返回多维矩阵的行数和列数。(2, 4)
 74 c=b.shape  #返回一维矩阵的列数.(4,)
 75 c=np.vstack((a,b))  #合拼成一个矩阵
 76 #以行为单位,按行顺序排列
 77 c=np.hstack((a,b))  #合拼成一个矩阵
 78 #以行为单位,按列顺序排列
 79 x=np.array([3,8,4,9])
 80 y=np.array([[5,6,7,8],[10,30,90,50],[500,200,800,444]])
 81 c=y[:,np.newaxis] #多维给每行加一层行嵌套
 82 c=x[:,np.newaxis]  #一维给每个元素加一层行嵌套。一行n列变成n行1列
 83 c=x[np.newaxis,:]
 84 d=y[np.newaxis,:]  #给矩阵加一个行总嵌套
 85 x=np.array([[3,8,4,9],[500,200,800,444]])
 86 y=np.array([[5,6,7,8],[10,30,90,50]])
 87 c=np.concatenate((x,y,x),axis=0)  #合拼成一个矩阵
 88 #以行为单位,按行顺序排列
 89 c=np.concatenate((x,y,x),axis=1)  #合拼成一个矩阵
 90 #以行为单位,把每列合拼成一行
 91 y=np.array([[5,6,7,8],[10,30,90,50],[500,200,800,444],[1,2,3,4]])
 92 c=np.split(y,2,axis=0) #分割矩阵【必须均等分】
 93 #把矩阵分层2个
 94 #axis=0  以行分割;
 95 # axis=1  以列分割   [array([[  5,   6],[ 10,  30],[500, 200],[  1,   2]]), array([[  7,   8],[ 90,  50],[800, 444],[  3,   4]])]
 96 c=np.split(y,2,axis=1)
 97 c=np.array_split(y,3,axis=0) #分割矩阵【可以不均等分】
 98 c=np.vsplit(y,2)  #跟np.split(y,2,axis=0)相同
 99 c=np.hsplit(y,2)  #跟np.split(y,2,axis=1)相同
100 a=np.arange(4)
101 b=a  #把a的地址给b
102 c=a
103 d=b
104 a[0]=11  #修改某元素的数据【注意 数据的类型】
105 a[1:3]=[22,33]  #修改第一项到第三项的数据。顾头不顾尾
106 e=b is a
107 b=a.copy() #把a的值给b
108 a[0]=100
109 print(a)
110 print(b)
111 
112 print(id(a),id(b))

 

排序:

 

 1 import numpy as np
 2 z=np.array([[100,0,3],[10,20,30]])
 3 c=np.sort(z,axis=1) #对各维分别进行排序-升序。[[  0   3 100] [ 10  20  30]]
 4 print(c)
 5 c=np.sort(z,axis=0)  #对各列分别进行排序-升序  [[ 10   0   3] [100  20  30]]
 6 c=np.argsort(z,axis=1) #返回 各维按升序排序所处的位置。[[1 2 0] [0 1 2]]
 7 c=np.argsort(z,axis=0) #返回 各列按升序排序所处的位置。[[1 0 0] [0 1 1]]
 8 a=[1,5,1,4,3,4,4]
 9 b=[9,4,0,4,0,2,1]
10 c=np.lexsort((b,a))

 

s=q[:-1]   去掉最后一个数据

 

q = np.arange(36)

s = q.reshape(6,6) #更改数组形状,变成6行6列

 

s = q.reshape(6,3,2) #更改数组形状
#总的分层6块,每块3行2列

s = q.reshape(-1,3,2)  #更改数组形状
# -1表示不知-自动处理,每块3行2列

 

arr2[::2,::2]   #设置步长为2

 

 

 

e=np.any(s) == True #s数据表中只要有一个数据是True就返回True
e=np.all(s) == True #s数据表中所有数据都是True就返回True

 

import numpy as np

a=np.array([[1,2,3],[5,6,7]])  #定义一个2行3列的矩阵数组
b=np.array([[10,20,30],[50,60,70]])

x=np.c_[a, b]   #把a、b矩阵的各对应行连接在一起
#行数不变,列数增加
print(a) print(b) print(x)

效果图:

 

 

import numpy as np

a=np.array([[1,2,3],[5,6,7]])  #定义一个2行3列的矩阵数组
b=np.array([[10,20,30],[50,60,70]])

x=np.r_[a, b]   #把a、b矩阵连接在一起
#行数增加,列数不变

print(a)
print(b)
print(x)

效果图:

 

 

 

 

 

 

 

 

 

posted @ 2019-03-02 06:44  天子骄龙  阅读(491)  评论(0编辑  收藏  举报