1.介绍及安装
Numpy是Numerical Python的简称。NumPy系统是Python的一种开源的数值计算框架。这种工具可用来存储和处理大型矩阵,相当于将Python变成一种免费的更强大的MatLab系统。
安装:cmd窗口中输入
pip install numpy
官方文档:
https://docs.scipy.org/doc/numpy/user/quickstart.html
使用:(导入numpy并将其重命名为np)
import numpy as np
2.ndarray
ndarray是一种多维数组对象
2-1.创建一维数组
import numpy as np
data1 = [1, 2, 3, 4, 5]
arr1 = np.array(data1)
print(arr1)
2-2.创建二维数组
import numpy as np
data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr2 = np.array(data2)
print(arr2)
2-3.dtype数据类型
print(arr1.dtype)
输出结果:int32
2-4.shape属性
print(arr2.shape)
输出结果:(2,4) 代表2行4列
2-5.指定数据类型
arr3 = np.array(data2, dtype=np.int64)
print(arr3.dtype)
2-6.float类型的数组
data3=[1,1.5,2,3,4]
arr3=np.array(data3)
print(arr3)
print(arr3.dtype)
输出结果:
[1. 2.5 3. 4. 5. ]
float64
2-7.astype 类型转换
data3 = [1, 2.5, 3, 4, 5]
arr3 = np.array(data3)
print(arr3.astype(np.int64))
输出结果:
[1 2 3 4 5]
2-8.ones方法---全为1的数组
arr4=np.ones(10)
print(arr4)
输出结果:
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
2-9.zeros方法
arr5=np.zeros(10)
print(arr5)
输出结果:
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
还可以创建二维的
arr5=np.zeros((3,4))
print(arr5)
输出结果:
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
2-10.数组和标量之间的运算
特性:大小相等的数组之间的任何运算都会应用到元素级,使我们不用编写循环即可对数组中的元素执行批量运算。
nd = np.array([1, 2, 3, 4])
print(nd*2)
print(nd*nd)
print(nd+nd)
输出结果:
[2 4 6 8]
[ 1 4 9 16]
[2 4 6 8]
2-11.基本的索引和切片
2-11-1.arange:range函数的数组版
arr6=np.arange(10)
print(arr6)
输出结果:
[0 1 2 3 4 5 6 7 8 9]
arr6=np.arange(1,10,2)
print(arr6)
输出结果:[1 3 5 7 9]
通过索引获取部分元素:
arr6=np.arange(1,10,2)
print(arr6)
print(arr6[3])
print(arr6[1:3])
输出结果:
[1 3 5 7 9]
7
[3 5]
通过索引赋值:
arr6=np.arange(1,10,2)
print(arr6)
arr6[2]=10
print(arr6)
输出结果:
[1 3 5 7 9]
[ 1 3 10 7 9]
通过索引查找:
data = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr7 = np.array(data)
print(arr7)
print(arr7[0])
print(arr7[1,2])
输出结果:
[[1 2 3 4]
[5 6 7 8]]
[1 2 3 4]
7
2-12.花式索引---Fancy indexing
花式索引是一个numpy术语,指利用整数数组进行索引
2-12-1.reshape方法---可以将一个一维数组变成一个二维数组
arr1=np.arange(12)
print(arr1)
输出结果:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
arr2=np.reshape(arr1,(3,4))
print(arr2)
输出结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
2-12-2花式索引
arr1=np.arange(12)
print(arr1)
输出结果:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
arr2=np.reshape(arr1,(3,4))
print(arr2)
输出结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
#常规索引
print(arr2[0])
输出结果:
[0 1 2 3]
#花式索引--传入一个数组(数组中的数代表第几行)
print(arr2[[1,2]])
输出结果:
[[ 4 5 6 7]
[ 8 9 10 11]]
#选取多行、多列交叉处的元素
print(arr2[[0,1],[2,3]]) #得到的是0行2列,和1行3列的元素
输出结果:
[2 7]
# 获取矩形区域
# 方法1
print(arr2[[0, 1]][:, [1, 2]])
输出结果:
[[1 2]
[5 6]]
# 方法2 np.ix_
arr = arr2[np.ix_([0, 1], [1, 2])]
print(arr)
输出结果:
[[1 2]
[5 6]]
3.通用函数(ufunc)
ufunc---universal funcations是一种对ndarray中的数据执行元素级运算的函数,如sqrt,exp
3-1.sqrt函数--开根号
arr1 = [1, 4, 9, 16]
arr2 = np.sqrt(arr1)
print(arr2)
输出结果:
[1. 2. 3. 4.]
3-2.add函数--使两个数组相加
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr3 = np.add(arr1, arr2)
print(arr3)
输出结果:
[5 7 9]
3-3.maximum函数--取每个数组的对应位置的最大值组成新的数组
arr1 = np.array([1, 5, 3])
arr2 = np.array([4, 2, 6])
arr3 = np.maximum(arr1, arr2)
print(arr3)
输出结果:
[4 5 6]
4-常用数学和统计方法
np.random.randn()--返回指定维度的随机数组
1-产生一个一维的随机数组
arr = np.random.randn(9)
print(arr)
#求最值
print(arr.min())
print(arr.max())
#求均值
print(arr.mean())
#求和
print(arr.sum())
#排序(从小到大)
arr.sort()
print(arr)
2-产生一个二维的随机数组
arr = np.random.randn(5,3)
print(arr)
#求最值
print(arr.min())
print(arr.max())
#求均值
print(arr.mean())
#排序(按行排序:从小到大)
arr.sort()
print(arr)
#排序(按列排序:从小到大)
arr.sort(axis=0)
print(arr)
#linespace---将区间等分,参数1是起始值,参数2是终点值,参数3是份数
arr = np.linspace(0, 10, 5)
print(arr)
输出结果:
[ 0. 2.5 5. 7.5 10. ]
3-线性代数
# 生成2个矩阵
x = np.array([[1, 2, 3], [4, 5, 6]])
print(x)
y = np.array([[6, 23], [-1, 7], [8, 9]])
print(y)
#矩阵相乘(第一个矩阵的列要等于第二个矩阵的行才能相乘)
r = x.dot(y)
print(r)
# 矩阵求逆
from numpy.linalg import inv
m = np.array([[4, 2], [3, 1]])
n = inv(m)
print(n)
4-随机数的生成
# 随机数的生成
from numpy import random
# normal方法--服从正态分布
rArray = random.normal(size=(4, 4))
print(rArray)
# randint 产生给定上下限范围内的随机选取整数(包括start,不包括end)
r = random.randint(0, 3) #产生0或1或2
print(r)