Numpy中常用的方法和属性汇总
本篇文章我们继续带大家学习Numpy的数据操作部分,主要给大家系统的介绍一下Numpy中常用的方法和属性。
虽然我们前面也用过一些方法,但是我们没有系统的给大家介绍,本次我们分成两部分,详细的给大家介绍一下Numpy中的一些方法和使用。
Numpy的常用方法
Ndarray对象的常用方法
Numpy的常用方法
生成函数
生成ndarray对象的函数,注意所有np即为numpy的简写。
np.arange(n): 生成指定范围的一个数据序列,返回的是ndarray对象。其实np.arange()的使用很类似内置函数range(),只不过range()函数生成的数据类似一个列表,而np.arange()生成的是ndarray对象。
np.array(list):将一个列表转成ndarray对象。
import numpy as np #导入numpy模块,起别名为np
import warnings
warnings.filterwarnings("ignore") # 忽略警告信息
data = np.arange(10)
display(data)
data1= list(range(10))
display(type(data1))
data1=np.array(data1)
display(data1)
# 当然使用np.array()还可以创建二维的数组
array = [[1,2],[3,4],[5,6],[7,8],[9,10]]
array = np.array(array)
display(array)
# 如果是一维数组:向量
# 如果是二维数组,那么就看做是一个矩阵
结果:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
list
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10]])
使用np.ones()、np.zeros()、np.full() 生成ndarray对象
np.ones(N) : 生成一个N长度的一维全1的ndarray对象
np.zeros(N): 生成一个N长度的一维全0的ndarray对象
np.full(N) : 生成一个N长度的一维值全为指定值的ndarray对象
import numpy as np
array1 = np.ones((3,4)) # 创建值全为1的数组。
display(array1)
array2 = np.zeros((3,4)) # 创建值全为0的数组。
display(array2)
array3 = np.full((3,4),6) # 创建值全为指定值的数组。
display(array3)
结果:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
array([[6, 6, 6, 6],
[6, 6, 6, 6],
[6, 6, 6, 6]])
大家可以发现ones和zeros得到的数组是浮点型的。那如何设置它的数据类型呢?
A. 在声明的时候可以使用,比如array1 = np.ones((3,4),dtype=np.int)
B. 使用ndarray对象.astype(数据类型)进行类型转换
Numpy的数据类型有哪些呢?
当然若想得到一些随机数组成的数组,我们还可以使用numpy.random中的方法完成
np.random.rand 生成指定形状的0~1之间的随机数
np.random.random 生成指定形状的0~1之间的随机数
np.random.randn 标准正态分布
np.random.normal 指定均值和方法的正态分布
np.random.randint 生成指定数值范围内的随机整数
np.random.seed 按照种子来生成随机数,种子一样,则生成的结果必一致
np.random.shuffle 打乱数组元素顺序
np.random.uniform 均匀分布
np.random.choice 按照指定概率从指定集合中,生成随机数
选出几个给大家介绍一下
np.random.rand 与np.random.random两者类似,都是产生0~1之间的随机数,但是函数的参数不一样。
import numpy as np
d1 = np.random.random((2,3)) #注意区别多(少)了一对()
d2 = np.random.rand(2,3)
display(d1,d2)
np.random.randn() 服从正态分布的从0~1之间的随机数
dn = np.random.randn(2,3)
display(dn)
np.random.normal() 指定均值和方差的正态分布
# loc:float 此概率分布的均值(对应着整个分布的中心centre)
# scale:float 此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
# size:int or tuple of ints 输出的shape,默认为None,只输出一个值
dn= np.random.normal(loc=4, scale=0.01, size=4)
dn1= np.random.normal(loc=4, scale=0.01, size=(2,4))
display(dn,dn1)
np.random.randint() 随机整数
# 在1-10范围里,随机生成5个int32类型的数值,生成的结果集可能出现重复数值 arr1 = np.random.randint(1, high=10, size=5, dtype=np.int32) display(arr1) # 生成一个指定范围[-10,0]的随机二维数组 arr2 = np.random.randint(-10, high=10, size=(4, 6), dtype=np.int32) display(arr2)
np.random.choice() 从指定数据集中,随机抽选一个数据
# 从数值集合中,按照指定概率生成随机数,参数P的总和一定得是1
arr = np.random.choice([0,3,5,7,8,9], p=[0.1, 0.2, 0.3, 0.4,0.2,0.5]) display(arr)
数学函数与运算操作
数学相关
Numpy提供了许多数学操作相关函数,常用的函数有:
abs / fabs :绝对值
ceil / floor :向上/向下取整
log / log2 / log10 :对数
exp :e为底的指数
modf :将浮点数num分解成整数部分和小数部分。
sin / sinh / cos / cosh :正玄、余玄...
sqrt :开平方
import numpy as np
arr = np.array([[-1,1.2,0.8,-3.9],[-6,1,-1.8,0.9]])
display(arr)
#绝对值
a = np.abs(arr)
display(a)
#向上/向下取整
b = np.ceil(arr)
b1 = np.floor(arr)
display(b,b1)
# 对数函数
c = np.log(arr)
display(c)
# e为底数的指数函数
d = np.exp(arr)
display(d)
# 浮点数拆分成 整数 和 浮点数 两部分
# 返回一个元组,含有两个元素(数组类型),第一个元素返回小数部分,第二个元素返回整数部分。
e = np.modf(arr)
display(e)
#开平方
f = np.sqrt(arr)
display(f)
运算相关的有:
数组与数(一维数组与一维数组)的运算(加+、减、乘*、除/、取整//、取模%、平方 * * 、立方 * * * ):
加:“+” 或者np.add(a, b)
减:“-” 或者np.subtract(a, b)
乘:“*” 或者np.multiply(a, b)
除:“/” 或者np.divide(a, b)
次方:“ ** ” ,如2^7=2**7
取整函数:“ // ”或者 np.ceil(), np.floor(), np.trunc()/fix(), np.rint(), np.around()
取模:“%”或者np.mod()和np.remainder()
矩阵乘积:np.dot(a, b)
判断: > 、 >= 、< 、 <= 、 == 、 !=
条件:all() 、any()
逻辑条件: & 、 | 、 !
上篇文章我们提到过运算相关的符号,当然每个符号还有对应的方法。在Numpy中的运算基本都是遵守广播机制的。现在我们在看一下关系运算符:
import numpy as np
arr1 = np.array([1,2,3,4,5])
arr2 = np.array([0,2,-5,-4,8])
display(arr1>arr2,arr1<arr2,arr1!=arr2,arr1==arr2)< p="">
结果如下:
array([ True, False, True, True, False]) array([False, False, False, False, True]) array([ True, False, True, True, True]) array([False, True, False, False, False])
其中all()和any()返回的也是bool类型的结果,any()表示只要有一个True 就返回 True,all()表示所有为True 就返回 True
display(np.all(arr1),np.any(arr2))
逻辑运算符的使用:
np.all(arr1<0) & np.all(arr2>0)
数组的链接(拼接、组合)和拆分
np.concatenate 对多个数组按指定轴的方向进行连接。
np.stack / np.vstack / np.hstack / np.dstack / np.tile 组合
np.split / np.hsplit / np.vsplit / np.dsplit 拆分
本文章不做具体讲解,可以参看上篇文章
排序与去重
np.unique( arr,return_index,return_inverse,return_counts,axis) : 返回ndarray中的元素,排除重复元素之后,并进行排序
np.sort( ndarray) : 作为函数使用时,不更改被排序的原始arrays,返回副本
arr = np.array([[1,2,3,4,5,5,6,6,6,8],[2,2,3,4,5,5,6,6,7,9]])
arr = np.unique(arr)
display(arr)
arr1 = np.array([1,5,6,6,6,2,3,4,5])
arr1 = np.sort(arr1)
display(arr1)
结果:
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
array([1, 2, 3, 4, 5, 5, 6, 6, 6])
改变形状与数组扁平化
我们可以通过数组对象的reshape方法(或者np的reshape函数)来改变数组的形状。
arr1 = np.arange(30).reshape(3, 10)
arr2 = np.arange(30).reshape(5, -1)
# 也可以使用
a = np.arange(10)
b = np.reshape(a, (2,5))
display(b)
我们可以通过调用ravel或flatten方法,对数组对象进行扁平化处理。
np.ravel / ravel
flatten
shape, reshape, resize, ravel
二者的区别在于,ravel返回原数组的视图,而flatten返回原数组的拷贝。
x = np.arange(16).reshape(4, 4)
display(x.ravel())
display(np.ravel(x))
display(x.flatten())
结果:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
统计函数
Numpy(或数组对象)具有如下常用的统计函数。
mean / sum / prod(乘积)
max / min / amax / amin
argmax / argmin
std / var
cumsum / cumprod
all / any
median / percentile
import numpy as np
a = np.random.randint(1,20,size=(4,5)) # 随机生成4行5列的数组
print(np.mean(a)) # 平均值
print(np.max(a)) # 最大值
print(np.min(a)) # 最小值
print(np.sum(a)) # 求和
print(np.prod(a)) # 求积
print(np.std(a)) # 求标准差
print(np.var(a)) # 求方差
print(np.median(a)) # 求中位数
print(np.argmax(a)) # 最大值索引
print(np.argmin(a)) # 最小值索引
当然也可以指定axis进行计算,比如按照轴进行计算,比如axis=0即列轴计算
print(np.mean(a,axis=0)) # 平均值
print(np.max(a,axis=0)) # 最大值
print(np.min(a,axis=0)) # 最小值
print(np.sum(a,axis=0)) # 求和
Ndarray对象属性与索引使用
Ndarray对象的属性
ndim 维度数
shape 维度/形状
dtype 元数数据类型
size 元素个数
itemsize 返回数组元素占用空间的大小。以字节为单位
nbytes 总字节数 = size * itemsize
T 数组对象的转置视图
flat 扁平迭代器
arr = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(arr.ndim) #维度数
print(arr.shape) #维度形状
print(arr.dtype) #元数数据类型
print(arr.size) #元素个数
print(arr.itemsize) # 返回数组元素占用空间的大小。以字节为单位
print(arr.nbytes) #返回占用空间的总长度
Ndarray对象的切片和索引
当然Numpy的方法有很多也是可以转成ndarray中的方法使用,比如统计函数
import numpy as np
a = np.random.randint(1,20,size=(4,5)) # 随机生成4行5列的数组
print(np.mean(a)) # 平均值
print(a.mean()) # 通过ndarray对象调用mean方法
print(np.max(a)) # 最大值
print(a.max()) # 通过ndarray对象调用max方法
import numpy as np
a = np.random.randint(1,20,size=(4,5)) # 随机生成4行5列的数组
print(np.mean(a)) # 平均值
print(np.max(a)) # 最大值
print(np.min(a)) # 最小值
print(np.sum(a)) # 求和
print(np.prod(a)) # 求积
print(np.std(a)) # 求标准差
print(np.var(a)) # 求方差
print(np.median(a)) # 求中位数
print(np.argmax(a)) # 最大值索引
print(np.argmin(a)) # 最小值索引
更多关于“Python培训”的问题,欢迎咨询千锋教育在线名师。千锋教育多年办学,课程大纲紧跟企业需求,更科学更严谨,每年培养泛IT人才近2万人。不论你是零基础还是想提升,都可以找到适合的班型,千锋教育随时欢迎你来试听。