Python-Numpy科学计算库

目录

一、基本属性

二、数组创建

1. 建立一个全0矩阵 

2.建立一个全1矩阵

3. 创建一个单位矩阵

4.生成一个随机数矩阵

5.创建一个[0,10)区间的随机整型数

6.创建一个矩阵,值为3.14

7.创建一个3*3均值为0,标准差为1的正态分布的随机数数组

ps:np.eye()和np.identity()的区别

三、numpy的相关操作

1.基础运算

2.矩阵乘法

3.矩阵转置

4.求和计算

5.求均值

6.求最值

7.指数运算

8.随机数矩阵

9.排序

10.控制范围

11.数组合并

12.分割

13.深拷贝和浅拷贝


 

一、基本属性

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
print(a)
print(a.ndim)   #维度
print(a.shape)  #x形状
print(a.size)   #大小
print(a.dtype)  #元素类型
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
2
(4, 3)
12
int32

二、数组创建

a = np.array([1, 2, 3],dtype = np.int32)
print(a.dtype)
b = np.array([1, 2, 3],dtype = np.float)
print(b.dtype)
int32
float64

1. 建立一个全0矩阵 

大小为 3x3; 类型为整型

np.zeros((3,3),dtype=int)
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])

2.建立一个全1矩阵

大小为4x5

np.ones((4,5))
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])

3. 创建一个单位矩阵

大小为4*4

np.eye(4)
np.identity(4)
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])

4.生成一个随机数矩阵

大小为 3x2

np.random.random((3,2))
array([[0.5417957 , 0.6947658 ],
       [0.47426902, 0.18598333],
       [0.80688502, 0.8270096 ]])

5.创建一个[0,10)区间的随机整型数

大小为3*3

np.random.randint(0,10,(3,3))
array([[2, 7, 6],
       [4, 2, 5],
       [7, 8, 8]])

6.创建一个矩阵,值为3.14

np.full((3,3), 3.14 )
array([[3.14, 3.14, 3.14],
       [3.14, 3.14, 3.14],
       [3.14, 3.14, 3.14]])

7.创建一个3*3均值为0,标准差为1的正态分布的随机数数组

np.random.normal(0,1,(3,3))
array([[-1.15826417,  1.96875436, -0.28209788],
       [ 0.93912938, -0.15576503, -0.5111234 ],
       [-0.04493866,  0.67364864,  1.04475278]]) 

要想得到矩阵,只要用mat()函数将数组转换为矩阵即可.
 

b = np.ones((4,5))
d = np.mat(b)
type(b)    #numpy.ndarray
type(d)   #numpy.matrix

b
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])
d
matrix([[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]])

ps:np.eye()和np.identity()的区别

  • np.identity(n, dtype=None)

参数:n,int型表示的是输出的矩阵的行数和列数都是n

dtype:表示的是输出的类型,默认是float

返回的是nxn的主对角线为1,其余地方为0的数组

  • numpy.eye(N,M=None,k=0,dtype=,order='C)

返回的是一个二维2的数组(N,M),对角线的地方为1,其余的地方为0.

参数介绍:

(1)N:int型,表示的是输出的行数

(2)M:int型,可选项,输出的列数,如果没有就默认为N

(3)k:int型,可选项,对角线的下标,默认为0表示的是主对角线,负数表示的是低对角,正数表示的是高对角。

(4)dtype:数据的类型,可选项,返回的数据的数据类型

(5)order:{‘C’,‘F'},可选项,也就是输出的数组的形式是按照C语言的行优先’C',还是按照Fortran形式的列优先‘F'存储在内存中

np.identity只能创建方形矩阵;np.eye可以创建矩形矩阵,且k值可以调节,为1的对角线的位置偏离度,0居中,1向上偏离1,2偏离2,以此类推,-1向下偏离。值绝对值过大就偏离出去了,整个矩阵就全是0了。

参考np.eye()和np.identity()

三、numpy的相关操作

1.基础运算

a = np.array([[1,2,3],
              [4,5,6]])
b = np.array([[1,1,2],
              [2,3,3]])
print(a + b)
print(a - b)
print(a * b)   #乘法,对应元素相乘
print(a ** b)  #求幂
print(a / b)  #除法
print(a % b)  #取余
print(a // b)  #取整
print(a + 2)  #所有元素加2
print(a * 2)  #所有元素*2
[[2 3 5]
 [6 8 9]]
[[0 1 1]
 [2 2 3]]
[[ 1  2  6]
 [ 8 15 18]]
[[  1   2   9]
 [ 16 125 216]]
[[1.         2.         1.5       ]
 [2.         1.66666667 2.        ]]
[[0 0 1]
 [0 2 0]]
[[1 2 1]
 [2 1 2]]
[[3 4 5]
 [6 7 8]]
[[ 2  4  6]
 [ 8 10 12]]
c = a > 3  #判断哪些元素大于1
print(c)
[[False False False]
 [ True  True  True]]

2.矩阵乘法

d = np.ones((3,5))  
np.dot(a,d)   #矩阵乘法
a.dot(d)
array([[ 6.,  6.,  6.,  6.,  6.],
       [15., 15., 15., 15., 15.]])

3.矩阵转置

#转置矩阵
print(a)
print(a.T)
print(np.transpose(a))
[[1 2 3]
 [4 5 6]]
[[1 4]
 [2 5]
 [3 6]]
[[1 4]
 [2 5]
 [3 6]]

4.求和计算

x = np.array([[1, 2], [3, 4]], dtype=np.float64) 
print(x)
print(np.sum(x))          #求和
print(np.sum(x,axis =0 )) #对列求和
print(np.sum(x,axis = 1)) #对行求和
# 但是对于二维数组b,代码b.sum(axis=0)指定对数组b对每列求和,b.sum(axis=1)是对每行求和,返回的都是一维数组(维度降了一维)。
[[1. 2.]
 [3. 4.]]
10.0
[4. 6.]
[3. 7.]

5.求均值

print(x)
print(np.mean(x))
print(np.mean(x,axis =0))
print(np.mean(x,axis =1))
#axis=0 指定对每列操作,axis=1 对每行操作
[[1. 2.]
 [3. 4.]]
2.5
[2. 3.]
[1.5 3.5]

6.求最值

print(x)
print(np.argmax(x))
print(np.argmax(x, axis =0))
print(np.argmax(x,axis =1))
#axis=0 指定对每列操作,axis=1 对每行操作
[[1. 2.]
 [3. 4.]]
3
[1 1]
[1 1]

7.指数运算

print(x)
print(np.exp(x))
[[1. 2.]
 [3. 4.]]
[[ 2.71828183  7.3890561 ]
 [20.08553692 54.59815003]]

8.随机数矩阵

#生成3*2 大小为0~1的随机数
a = np.random.random((3,2))
print(a)
#生成3*2  符合标准正态分布的随机数
b = np.random.normal(size=(3,2))
print(b)
#生成3*2  大小为0~10的随机数
c = np.random.randint(0,10,size=(3,2))
print(c)
[[0.96088609 0.46038883]
 [0.76186015 0.16310044]
 [0.19786486 0.50588423]]
[[ 0.76954693 -0.37732865]
 [-1.13219865  0.56850587]
 [ 1.66137094  0.11051942]]
[[4 7]
 [5 2]
 [4 8]]

9.排序

a = np.random.randint(0,10,size=(1,10))
print(a)
print(np.sort(a))
b = np.random.randint(0,10,size=(3,2))
print(b)
print(np.sort(b))
[[4 4 9 8 4 3 1 0 1 2]]
[[0 1 1 2 3 4 4 4 8 9]]
[[5 9]
 [2 5]
 [0 6]]
[[5 9]
 [2 5]
 [0 6]]

10.控制范围

#控制数字范围,大于7位7,小于2为2
print(np.clip(a,2,7))
[[4 4 7 7 4 3 2 2 2 2]]

11.数组合并

a = np.array([1,2,3])
b = np.array([4,5,6])
a2 = np.array([[1,2,3],[4,5,6]])
c = np.vstack((a,b))#纵向合并
print(c)
d = np.hstack((a,b)) #横向合并
print(d)
e1 = np.concatenate((a2,a2),axis = 0) #纵向
print(e1)
e2 = np.concatenate((a2,a2),axis = 1) #横向
print(e2)
[[1 2 3]
 [4 5 6]]
[1 2 3 4 5 6]
[[1 2 3]
 [4 5 6]
 [1 2 3]
 [4 5 6]]
[[1 2 3 1 2 3]
 [4 5 6 4 5 6]]

12.分割

#分割
a = np.arange(12).reshape((3,4))
print(a)
b,d = np.split(a,2,axis=1) #列分割,分成两份
#b,d = np.hsplit(a,2) 
print(b)
print(d)
b2,d2,c2 = np.split(a,3,axis=0) #行分割,分成两份
#b,d = np.vsplit(a,2) 
print(b2)
print(d2)
print(c2)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[[0 1]
 [4 5]
 [8 9]]
[[ 2  3]
 [ 6  7]
 [10 11]]
[[0 1 2 3]]
[[4 5 6 7]]
[[ 8  9 10 11]]

13.深拷贝和浅拷贝

#浅拷贝和深拷贝
a = np.array([1,2,3])
b = a #浅拷贝,a,b共享一块内存
b[0] = 9
print(a)
print(b)
c = a.copy()#深拷贝
c[0] =10
print(a)
print(c)
[9 2 3]
[9 2 3]
[9 2 3]
[10  2  3]

 

你可能感兴趣的:(语言学习)