numpy优点
- ndarray(高性能数组)
- 用于对整数数组进行快速运算的标准数学函数
- 线性代数、随机数生成,统计分析等接口
ndarray
- array创建
data = [1,3,7,8]
arr = np.array(data)
data1 =[ [1,3,7,8],[9,7,5,3]]
arr1 = np.array(data1)
print(arr)
print(arr1)
>>>[1 3 7 8]
>>>[[1 3 7 8] [9 7 5 3]]
- asarray方法创建
arr3 = np.asarray([3,4,5])
print(arr3)
>>>[3 4 5]
区别:array创建是对原始数据的一份拷贝,asarray则是指向原始对象
- 创建一个全零数组
arr0 = np.zeros(4)
arr1 = np.zeros((2,3))
print(arr0)
print(arr1)
>>>[0. 0. 0. 0.]
>>>[[0. 0. 0.] [0. 0. 0.]]
- 创建一个全1数组
ones1 = np.ones(4)
ones2 = np.ones((2,3))
print(ones1)
print(ones2)
>>>[1. 1. 1. 1.]
>>>[[1. 1. 1.] [1. 1. 1.]]
- 创建一个没有任何值的数组
np.empty((3,4))
- 创建一个单位矩阵
e = np.eye(3)
print(e)
>>>[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
- 矩阵形状
e = np.eye(3)
shape = e.shape
print(shape)
>>>(3, 3)
ndarray与标量之间的计数
- ndarray与常量计算
arr = np.asarray([[200,0,0],[0,0,0]])
arr1 = arr+3
print(arr1)
>>>[[203 3 3]
[3 3 3]]
arr2 = arr*1.2
print(arr2)
>>>[[240. 0. 0.]
[0. 0. 0.]]
- ndarray之间计算
arr = np.asarray([[200,0,0],[0,0,0]])
arr1 = np.asarray([[2,1,4],[1,7,9]])
arr2 = arr*arr1
print(arr2)
arr3 = arr + arr1
print(arr3)
arr4 = np.add(arr,arr1)
print(arr4)
>>>[[400 0 0]
[0 0 0]]
>>>[[202 1 4]
[1 7 9]]
>>>[[202 1 4]
[1 7 9]]
- 数组索引
arr = np.asarray([[200,0,0],[0,0,0]])
print(arr[0])
>>>[200 0 0]
- 数组切片
a= [1,2,3,4,5,6]
print(a[2:4])
>>>[3, 4]
b = [[1,3,5,7,9],[2,4,6,8,0]]
print(b[0][0:3])
>>>[1, 3, 5]
b = [[1,3,5,7,9],[2,4,6,8,0],[3,4,5,6,7]]
print(b[0:1,:])
>>>[[1, 3, 5, 7, 9]]
- 花式索引
arr = np.empty((8,4))
for i in range(8):
arr[i] = i
print(arr)
#以某种特定顺序选取行子集,只需要传入一个用于指定行顺序的整数数组或ndarray
print(arr[[3,5,1,6]])
>>>
[[0. 0. 0. 0.]
[1. 1. 1. 1.]
[2. 2. 2. 2.]
[3. 3. 3. 3.]
[4. 4. 4. 4.]
[5. 5. 5. 5.]
[6. 6. 6. 6.]
[7. 7. 7. 7.]]
>>>
[[3. 3. 3. 3.]
[5. 5. 5. 5.]
[1. 1. 1. 1.]
[6. 6. 6. 6.]]
arr = np.arange(32).reshape((8,4))
print(arr)
>>>
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]
[24 25 26 27]
[28 29 30 31]]
#数组索引
#同时传入一个二维数组
#数组索引第一个元素为一个数组,代表行的序号,数组索引第二个元素为一个数组,表示列的序号
print(arr[[1,5,7,2],[0,3,1,2]])
>>>[ 4 23 29 10]
#数组索引第一个元素为一个数组,表示行的序号,第二个索引为一个切片,表示一个列的切片
print(arr[[1,5,7],0:3])
>>>
[[ 4 5 6]
[20 21 22]
[28 29 30]]
#选取4行,所有列,修改列顺序
print(arr[[1,5,7,2]][:,[3,2,1,0]])
>>>
[[ 7 6 5 4]
[23 22 21 20]
[31 30 29 28]
[11 10 9 8]]
print(arr[np.ix_([1,5,7,2],[0,2,1,3])])
>>>
[[ 4 6 5 7]
[20 22 21 23]
[28 30 29 31]
[ 8 10 9 11]]
numpy常用函数
对数组进行元素级的运算函数
- 指数函数 exp()
arr = np.arange(16).reshape((4,4))
print(arr)
arr1 = np.exp(arr)
print(arr1)
- 绝对值 abs()
- 平方 square()
- 开根号 sqrt()
数学统计方法
- 计算均值 mean()
arr = np.arange(16).reshape((4,4))
print(arr.mean())
>>>7.5
print(np.mean(arr))
>>>7.5
print(np.mean(arr,axis=0))
>>>[6. 7. 8. 9.]
print(np.mean(arr,axis=1))
>>>[ 1.5 5.5 9.5 13.5]
- 数组或某轴上的元素求和 sum()
- 标准差和方差 std() var()
- 最小值和最大值 min() max()
- 最小值和最大值的索引 argmin() argmax()
- 所有元素的累计和 cumsum()
- 所有元素的累积 cumprod()
线性代数
- 矩阵相乘 dot()
x = np.array([[1,2,3],[4,5,6]])
y = np.array([[6,20],[-1,3],[9,8]])
z = np.dot(x,y)
print(z)
>>>
[[ 31 50]
[ 73 143]]
标准线性代数运算函数 numpy.linalg
- 矩阵的逆矩阵 linalg.inv()
X = np.random.rand(5,5)
print(X)
inv_X = np.linalg.inv(X)
print(inv_X)
- 转置矩阵 X.T
- diag 以一维数组的形式返回方阵的对角线元素,或者将一维数组转化为方阵
- dot 矩阵乘法
- trace 计算对角线元素的和
- det 计算矩阵行列式
- eig 计算方阵的本征值和本征向量
- inv 计算方阵的逆
- pinv 计算矩阵的Moore-Penrose伪逆
- qr 计算QR分解
- svd 计算奇异值分解
- solve 解线性方程组Ax = b
- lstsq 计算Ax = b的最小二乘解
随机数生成 numpy.random
- 高斯分布
np.random.normal(size = (4,4))
- seed 确定随机数生成器的种子
- permutation 返回一个序列的随机排列
- shuffle 对一个序列随机排列
- rand 产生均匀分布样本值
- randint 给定的上下限范围,随机选取整数
- randn 产生正态分布数值
- binomial 产生二项分布数值
- normal 产生高斯分布
- beta 产生beta分布