numpy基本数据类型及常用函数

文章目录

  • 数据类型
  • 创建np.array
  • 索引与切片
  • 深拷贝与浅拷贝
  • 切分
  • 级联
  • 排序
    • 部分排序
    • 快速排序
  • 常用函数
    • 一元函数
    • 二元函数
    • 数学统计方法
    • 数组去重及集合运算
    • 线性代数
    • 随机数
    • 数组连接函数
    • 其他函数

数据类型

Numpy 的类型 描述
np.int8 字节(-128到127)
np.int16 整数(-32768至32767)
np.int32 整数(-2147483648至2147483647)
np.int64 整数(-9223372036854775808至9223372036854775807)
np.uint8 无符号整数(0到255)
np.uint16 无符号整数(0到65535)
np.uint32 无符号整数(0到4294967295)
np.uint64 无符号整数(0到18446744073709551615)
np.intp 用于索引的整数,通常与索引相同 ssize_t
np.uintp 整数大到足以容纳指针
np.float32
np.float64 / np.float_ 请注意,这与内置python float的精度相匹配。
np.complex64 复数,由两个32位浮点数(实数和虚数组件)表示
np.complex128 / np.complex_ 请注意,这与内置python 复合体的精度相匹配。
bool 存储True和False值的布尔类型
object python对象类型
string_ 固定长度的字符串类型
unicode_ 固定长度的unicode类型

创建np.array

# 一维
nl = np.array([1,2,3,4])
# 二维:
n2 = np.array([[1,2,3],[2,3,4],[5,6,7]])
N2.shape    # 查看行列数,一个元组
np.array(list('abcdeef3')).reshape(2,4)   #一维转化为二维,2行4列:np.array传入的数据必须一致。
np.ones(shape = [2,3],dtype = int)    # 2行3列,值全为1的数组
ones = np.ones(shape =[100,80,4],dtype = float)  
np.zeros     # 用法同np.ones()方法
np.random.randn(5)	# -1~1随机数,5个
np.random.random(54)	 #0~1随机数:生成5行4列随机数
np.random.rand	# 0~1随机数
np.random.randint(55,100,size = 9)	 # 区间左闭又开随机整数,size指定数据个数。
np.arange(3,7,0.3)		# 生成连续数,左闭又开,第三个参数,间隔,默认为1。arange(start开始,stop结束,step,dtype =None)左闭右开

索引与切片

ndarray[0,1] 	# 一维的第二个数据,跟切片取数一致。
#切片:左闭右开
np.random.randint(150,size =10)
n2[1:3]  #第二个,第三个
#切片排序
n3 = np.arange(1,10,1)
n3[::2]   # 两个冒号,后边的数字是间隔,如果正整数从前往后切,如果负数,从后往前按间隔切
n3.reshape(2,5)  #转化两行五列
# 如果是负数,多维直接转化为一维。图片三维转一维,比如:
n3.reshape((-1))

深拷贝与浅拷贝

  • 浅拷贝:
    指向不同,里边共用元素,修改一个,另一个对应元素也会改变。a = b.view()
  • 深拷贝:
    指向不同,里边不共用元素,完全独立。a = b.copy()
  • 副本
    所有赋值运算,不会为ndarray的任何元素创建副本,对赋值后的对象操作修改,原来的对象也同样生效;
l=np.array((1,2,3))
n=l
n[1]=5   # l也随之改变
# 可以使用copy()函数创建副本
n = l.copy()

切分

三个函数完成切分工作,左闭右开

  • np.split
  • np.vsplit
  • np.hsplit
n5 = np.random.randint(0,150,size=(5,7))
np.split(n5,(1,3))   切成三部分,0-1切下。2-3切下。:默认切分行
照片裁剪,可以用这种方法。
np.split(n5,(1,3),axis = 1)   切分列axis=1
np.vsplit(n5,(1,3))  默认切分行
np.hsplit(n5,(1,3))  切分列

级联

np.concatenate 级联需要注意的点,类似于pandas的concat方法:

  1. 参数必须是列表:一定要加中括号或小括号
  2. 维度必须相同
  3. 形状必须相同
  4. 【重点】级联的方向默认是shape这个tuple的第一个值所代表的维度方向
  5. 可通过aixs参数改变级联方向。
a1=np.random.randint(1,10,size=(5,5))
a1.ndim   查看a1的维度
np.concatenate((a1,a1))
np.concatenate((a1,a1),axis = 1)
np.concatenate((a1,a1),axis = 0)
# np.hstack 与 np.vstack
# 水平级联与垂直级联,进行维度的变更。
a2 = np.array((1,2,3))
a3 = np.vstack(a2) #  转化为2维数据,三行一列
a4 =np.hstack(a2)  #2维转化为1维

排序

部分排序

当我们想取top-n排序输出时,可以先通过partition函数获取top元素再调用sort排序
np.partition(a,k)

  • 当k为正数时,我们想要得到最小的k个数,从前往后
  • 当k为负数时,我们想要得到最大的k个数,从后往前
  • 先取数切片再排序,这样会快很多。
n3 = np.partition(n2,-5)[:5] 
n3.sort()

快速排序

np.sort() 和ndarray.sort都可以,但有区别:

  • np.sort()不改变输入,
  • ndarray.sort()本地处理,不占用空间,但改变输入。原来的数据进行了改变,不占内存。

常用函数

一元函数

类型 说明
abs, fabs 计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs。
sqrt 计算各元素的平方根。相当于arr ** 0.5
sqare 计算各元素的平方。相当于arr ** 2
exp 计算各元素的e^x
log, log10, log2, log1p 分别为自然对数、底数为10的log、底数为2的log和log(1 + x)。
sign 计算各元素的正负号:1(正数)、0(零)、-1(负数)。
ceil 计算各元素的ceiling值,即大于等于该值的最小整数。
floor 计算各元素的floor值,即小于等于该值的最小整数。
rint 将各元素值四舍五入到最接近的整数,保留dtype。
modf 将数组的小数部分与整数部分以两个独立数组的形式返还。
isnan 返回一个表示“哪些值是NaN(这不是一个数字)”的布尔型数组
isfinite, isinf 分别返回一个表示“哪些元素是有限的(非inf,非NaN)”或“哪些元素是无穷的”的布尔型数组
cos, cosh, sin, sinh, tan, tanh 普通型或双曲型三角函数
arccos, arccosh, arcsin, arcsinh, arctan, arctanh 反三角函数
logical_not 计算各元素not x的真值。相当于-arr。
argmin 最小值所在的索引
argmax 最大值所在的索引

二元函数

类型 说明
add 将数组中对应的元素相加
subtract 从第一个数组中减去第二个数组中的元素
multiply 数组元素相乘
divide, floor_divide 除法或向下取整除法
power 对第一个数组中的元素A和第二个数组中对应位置的元素B,计算A^B。
maximum, fmax 元素级的最大值计算。fmax将忽略NaN。
minimum, fmin 元素级的最小值计算。fmin将忽略NaN。
mod 元素级的求模计算
copysign 将第二个数组中的符号复制给第一个数组中的值
greater, greater_equal, less, less_equal,equal, 执行元素级的比较,最终产生布尔型数组。
not_equal
logical_and, logical_or, logical_xor 执行元素级的真值逻辑运算,最终产生布尔型数组。

数学统计方法

类型 说明
sum 对数组中全部或某轴向的元素求和。零长度的数组的sum为0。
mean 算术平均数。零长度的数组的mean为NaN。
std, var 分别为标准差和方差,自由度可调(默认为n)。
min, max 最大值和最小值
argmin 分别为最大值和最小值的索引
cumsum 所有元素的累计和
cumprod 所有元素的累计积

数组去重及集合运算

类型 说明
unique(x) 计算x中的唯一元素,并返回有序结果。
intersect1d(x, y) 计算x和y中的公共元素,并返回有序结果。
union1d(x, y) 计算x和y的并集,并返回有序结果。
in1d(x, y) 得到一个表述"x的元素是否包含于y"的布尔型数组
setdiff1d(x, y) 集合的差,即元素在x中且不在y中
setxor1d(x, y) 集合的异或,即存在于一个数组中但不同时存在于两个数组中的元素。

线性代数

常用的numpy.linalg函数

类型** 说明
diag 以一维数组的形式返回方阵的对角线(或非对角线元素),获将一维数组转换为方阵(非对角线元素为0)。
dot 矩阵乘法
trace 计算对角线元素的和
det 计算矩阵行列式
eig 计算方阵的特征值和特征向量
inv 计算方阵的逆
pinv 计算矩阵的Moore-Penrose伪逆
qr 计算QR分解
svd 计算奇异值分解
solve 解线性方程Ax = b,其中A为一个方阵。
lstsq 计算Ax = b的最小二乘解

随机数

类型 说明
seed 确定随机数生成器的种子
permutation 返回一个序列的随机排列或返回一个随机排列的返回
shuffle 对一个序列就地随机乱序
rand 产生均匀分布的样本值
randint 从给定的上下限范围内随机选取整数
randn 产生正态分布(平均值为0,标准差为1)
binomial 产生二项分布的样本值
normal 产生正态(高斯)分布的样本值
beta 产生Beta分布的样本值
quare 产生卡方分布的样本值
gamma 产Gamma分布的样本值
uniform 产生在[0, 1]中均匀分布的样本值

数组连接函数

类型 说明
concatenate 最一般化的连接,沿一条轴连接一组数组
vstack, row_stack 以面向行的方式对数组进行堆叠(沿轴0)
hstack, 以面向行的方式对数组进行堆叠(沿轴1)
column_stack 类似于hstack,但是会先将一维数组转换为二维列向量。
dstack 以面向“深度”的方式对数组进行堆叠(沿轴2)
split 沿指定轴在指定的位置拆分数组
hsplit, vsplit, dsplit split的便捷化函数,分别沿着轴0、轴1和轴2进行拆分。

其他函数

# np.histograms:统计数据切分点间隔的数据条数,可用作直方图
s = np.random.randint(1,100,sie = 1000)
np.histogram(s.values,bins = np.arange(1,100,10))	也可以给bin直接传入整数参数。
a = np.random.random((3,4))
a.ravel()	#拉直成一维数组
a.shape=(4,3)	#也可以用shape设定形状
a.reshpe()	#重新设置形状。
a.sort(axis =1)		#按照行排序
a.argsort(axis =1)	#排序,得到排序后的索引。

你可能感兴趣的:(Python,numpy,python)