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

数据类型

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值的布尔类型
objectpython对象类型
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, dsplitsplit的便捷化函数,分别沿着轴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)	#排序,得到排序后的索引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值