numpy用法
导入:import numpy as np
生成矩阵:array = np.array([[1,2,3],[4,5,6]])
矩阵维度:array.ndim
矩阵形状:array.shape
矩阵大小:array.size
矩阵元素类型:array.dtype
创建array
a = np.array([1,2,3], dtype=np.int32)
dtype:指定数据类型
矩阵维度:创建时方括号的层数代表矩阵的维度
常用用法
zero = np.zeros((2, 3)) 生成两行三列全为0的矩阵
one = np.empty((2, 3)) 生成两行三列全为1的矩阵
empty = np.empty((3, 2)) 生成三行两列全为接近于0但不是0的矩阵
e = np.arange(10) 此种用法与python中的range类似
h = np.arange(10).reshape(2, 4) 重新定义矩阵的形状
矩阵操作(要求:两个矩阵形状相同)
arr1:矩阵1
arr2:矩阵2
加法:arr1 + arr2 按位相加
减法:arr1 - arr2 按位相减
乘法:arr1 * arr2 按位相乘
求幂:arr1 ** arr2 按位操作
除法:arr1 / arr2 按位相除
取余:arr1 % arr2 按位取余
取整:arr1 // arr2 按位取整
与数的操作:arr1 + 2 矩阵中的每位都与2操作
比较操作:arr1 > 3 判断矩阵中那些元素大于3,返回一个布尔型的矩阵
矩阵运算(根据线性代数中的矩阵操作进行加减乘除)
arr1:矩阵1
arr2:矩阵2
矩阵乘法:np.dot(arr1, arr2)/arr1.dot(arr2)
转置矩阵:arr1.T/np.transpose(arr1)
numpy中生成随机数
arr1 = np.random.random((3, 2)) 生成三行两列从0-1的随机数
arr2 = np.random.normal(size=(3, 2)) 生成三行两列符合标准正态分布的随机数
arr3 = np.random.randint((0, 10, size=(3, 2))) 生成三行两列0-10的随机整数
单个矩阵求和:np.sum(arr1)
单个矩阵对列求和:np.sum(arr1, axis=0)
单个矩阵对行求和:np.sum(arr1, axis=1)
单个矩阵中求最大/最小值:np.max(arr1)/np.min(arr1)
求某个矩阵中最小值/最大值的索引:np.argmin(arr1)/np.argmax(arr1)
求矩阵的平均值:np.mean(arr1)/arr1.mean()
求矩阵中位数:np.median(arr1)
矩阵开方:np.sqrt(arr1)
矩阵排序:np.sort(arr1) 对每行进行排序
np.clip(arr1, 2, 7):对于arr1中的元素小于2就变成2,大于7就变成7
numpy索引
a = np.arange(2, 14):与python索引类似,用法可参照python中list用法
多维矩阵:
a[i]:表示第i+1行
a[i][j]:表示第i+1行第j+1列
a[:,j]:表示第j+1列
迭代行
for i in a:
print(i)
迭代列
for i in a.T:
print(i)
迭代元素
for i in a.flat:
print(i)
array合并
垂直合并:np.vstack((arr1, arr2))
水平合并:np.hstack((arr1, arr2))
np.concatenate((arr1, arr2),axis=0):可自主指定合并方式,合并的array维度要相同,参数axis=0时纵向合并,参数axis=1时横向合并。
一维array增加一个维度:np.newaxis
实例:
arr1 = np.arange(1,4)
arr1_2 = arr1[:,np.newaxis]
arr1_2变成三行一列
arr1_3 = arr1[np.newaxis,:]
arr1_3变成一行三列
np.atleast_2d(arr)/np.atleast_3d(arr):判断arr是否最少为二维/三维array,如果不是转换成arr[np.newaxis,:]这种形式
array分割
np.split(arr, 2, axis=1):按列分割,分成两份
np.split(arr, 3, axis=0):按行分割,分成三份
np.array_split(arr, 2, axis=1):按列分割,分成两份,不等分割
np.array_split(arr, 3, axis=0):按行分割,分成三份,不等分割
np.vsplit(arr, 3):按行分割
np.hsplit(arr, 2):按列分割
numpy的浅拷贝和深拷贝
浅拷贝:类似值引用,指向同一块内存地址,只要一个改变大家都会改变
深拷贝:arr.copy() 重新开辟一块内存空间,几者之间互不影响