numpy模块(2)

1、利用布尔值来取元素

import numpy as np
mask = np.array([1,0,1],dtype=bool) # 1表示取对应的元素,0表示不取
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr[mask,2])
print(arr[:,mask])

运行结果:

[3 9]
[[1 3]
 [4 6]
 [7 9]]

一维数组取值

arr = np.array([1,2,3,2,4,5,6,4,6])
mask = arr>3
print(arr[mask])
mask1 = arr==2
print(arr[mask1])

运行结果:

2、变换数组形态

(1)展平数组 ravel 和 flatten

# 一维数组变为二维数组
arr = np.arange(1,10,1).reshape(3,3)
print(arr)
# 二维数组变为一维数组
arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr1)
arr1.ravel()
print(arr1)

运行结果:

3、展平数组 flatten

# 展平方式 flatten
arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr1)
print('横向展平:',arr1.flatten())
print('纵向展平:',arr1.flatten('F'))

运行结果:

4、拼接 hstack 和 vstack

arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2 = np.ones((3,3))
print(arr2)
# 横向拼接
print('横向拼接:\n',np.hstack((arr1,arr2)))
# 纵向拼接
print('纵向拼接:\n',np.vstack((arr1,arr2)))

运行结果:

5、横向变换与纵向变换

# concatenate  横向变换与纵向变换
print('横向变换:\n',np.concatenate((arr1,arr2),axis=1))
print('纵向变换:\n',np.concatenate((arr1,arr2),axis=0))

运行结果:

6、横向分割与纵向分割 hsplit 与 vsplit

arr = np.diag([1,2,3,4])
print(arr)
print('横向分割:\n',np.hsplit(arr,2))
print('纵向分割:\n',np.vsplit(arr,2))

print('横向分割:\n',np.split(arr,2,axis=1))
print('纵向分割:\n',np.split(arr,2,axis=0))

运行结果:

E:\Anaconda3\envs\Pachong\python.exe E:/Project/爬虫阶段/day-05-20/test.py
[[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]
横向分割:
 [array([[1, 0],
       [0, 2],
       [0, 0],
       [0, 0]]), array([[0, 0],
       [0, 0],
       [3, 0],
       [0, 4]])]
纵向分割:
 [array([[1, 0, 0, 0],
       [0, 2, 0, 0]]), array([[0, 0, 3, 0],
       [0, 0, 0, 4]])]
横向分割:
 [array([[1, 0],
       [0, 2],
       [0, 0],
       [0, 0]]), array([[0, 0],
       [0, 0],
       [3, 0],
       [0, 4]])]
纵向分割:
 [array([[1, 0, 0, 0],
       [0, 2, 0, 0]]), array([[0, 0, 3, 0],
       [0, 0, 0, 4]])]

Process finished with exit code 0

7、创建矩阵 mat, matrix, bmat

matr1 = np.mat('1 2 3;4 5 6;7 8 9')
print(matr1)
matr2 = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
print(matr2)
# 合并矩阵bmat
arr = np.eye(3)
arr1 = np.diag([1,2,3])
print('合并之后的大矩阵为:\n',np.bmat('arr arr1;arr1 arr'))

运行结果是:

E:\Anaconda3\envs\Pachong\python.exe E:/Project/爬虫阶段/day-05-20/test.py
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[1 2 3]
 [4 5 6]
 [7 8 9]]
合并之后的大矩阵为:
 [[1. 0. 0. 1. 0. 0.]
 [0. 1. 0. 0. 2. 0.]
 [0. 0. 1. 0. 0. 3.]
 [1. 0. 0. 1. 0. 0.]
 [0. 2. 0. 0. 1. 0.]
 [0. 0. 3. 0. 0. 1.]]

Process finished with exit code 0

8、矩阵的四则运算

(1)矩阵的转置与求逆

matr1 = np.mat('1 2 3;4 5 6;7 8 9')
# 专置
print('转置之后的矩阵为:\n',matr1.T)
# 求逆
matr2 = np.mat('1 0;3 2')
# 如果原有矩阵不可逆,会重新创建一个伪逆矩阵
matr21 = matr2.I
print('求逆之后的矩阵为:\n',matr2.I)
print(matr2*matr21)

运行结果:

矩阵的其他算法:加减乘

matr1 = np.mat('1 2 3;4 5 6;7 8 9')
matr2 = np.eye(3,3)
print(matr1+matr2)
print(matr1-matr2)
print(matr1*matr2)

运行结果:

9、ufunc函数 通用函数 ,对数组中所有元素进行操作的函数

x = np.array([1,2,3])
y = np.array([2,2,4])
print(x+y)
print(x-y)
print(x*y)
print(x/y)

# 比较运算,返回布尔值
print(x>y)
print(x<y)
print(x>=y)
print(x<=y)
print(x==y)
print(x!=y)

# 逻辑运算
print(np.all(x==y)) # 与
print(np.any(x==y)) # 或

运算结果:

 

10、广播机制:

如果两个数组的后缘维度(从末尾开始算起的维度)轴长度相符其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失维度和(或)轴长度为1的维度上进行自动补全。

arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2 = np.array([1,1,1])
print(arr1+arr2)

arr3 = ([1],[2],[3])
print(arr1+arr3)

运行结果: