虽然python自己有列表和数组,但是与numpy相比更消耗资源。numpy是python进行数值计算时最重要的基础包之一
创建数组
import numpy as np
a = np.arange(5) # 一维数组
b = np.array([np.arange(6), np.arange(6)]) # 二维数组
x = [y for y in range(6)]
c = np.array([x] * 4) # 二维数组4*6
c:--------------
[[0 1 2 3 4 5]
[0 1 2 3 4 5]
[0 1 2 3 4 5]
[0 1 2 3 4 5]]
索引
基本上和list一模一样
遍历:
for element in b.flat: # 将b展成一维数组后遍历并打印
print(element)
for i in range(len(b)): # 根据索引遍历b中的元素并打印
for j in range(len(b[0])):
print(b[i][j])
切片索引:左闭右开
找出二维数组a中第m个数组的前n个元素 a[m, :n]
基本运算
向量和向量:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[4, 5, 6], [1, 2, 3]])
运算
加法 | np.add(a,b) 或 a+b | 对应位进行运算 print(a + b) |
减法 | np.subtract(a,b) 或 a-b | |
乘法(X乘) | np.multiply(a,b) 或 a * b | |
除法 | np.divide(a,b) 或 a/b | |
乘法(点乘,内积) | np.dot(a,b) | 对应位相乘再相加 |
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([4, 5, 6])
print(np.dot(a, b))
-----------
[32 77]
向量和标量:
有数组a,运算有加减乘除取余( + - * / %)都是所有位同时进行运算
a.T,矩阵转置
矩阵的逆,参考
矩阵可逆的充要条件是矩阵满秩
import numpy as np
a = np.array([[1, 2], [3, 4]]) # 初始化一个非奇异矩阵(数组)
print(np.linalg.inv(a)) # 对应于MATLAB中 inv() 函数
# 矩阵对象可以通过 .I 更方便的求逆
A = np.matrix(a)
print(A.I)
通用函数 ufunc
NumPy 中包含了对数组进行处理的通用函数。以 ndarray 数组对象作为运算的基本元素
一个参数的叫一元函数,两个参数的叫二元函数
import numpy as np
A = np.random.randint(0, 10, (5, 6)) # 随机初始化一个5行6列的整数矩阵A
# 对矩阵A开平方
np.sqrt(A)
# 将数组 A 的平方根乘浮点数分解成整数和小数部分
# B 是小数部分
B, C = np.modf(np.sqrt(A))
np.square() 平方;np.abs() 绝对值
更多可参考:Numpy通用函数-优快云博客
改变numpy数组的形状
- 改变形状:reshape()、ravel()、flatten()、transpose()
- 数组堆叠:hstack(),vstack(),dstack()
改变形状:
reshape()
import numpy as np
b = np.arange(24).reshape(2,3,4) # 2个3*4的数组
print(b)
ravel(),拆解,将多维数组用一维数组展示出来
flatten(),拉直,将多维数组变成一维数组(新开辟空间)
transpose(),转置 b.transpose()
shape,使用元组的方式改变形状
import numpy as np
b = np.arange(24)
b.shape = (6, 4)
print(b)
数组堆叠:
就是两个数组叠在一起,要注意的是使用时是两层括号
hstack() 水平叠加
vstack() 垂直叠加
前面这两个很容易理解
dstack() 深度叠加,就是在深度上叠加(参考)
import numpy as np
a = np.arange(9).reshape(3, 3)
b = a * 2
c = np.hstack((a, b)) # 水平叠加
print(c)
---------------------
[[ 0 1 2 0 2 4]
[ 3 4 5 6 8 10]
[ 6 7 8 12 14 16]]